//
//  TimeSkipModal.swift
//  lichunWebsocket
//
//  Time skip purchase modal with cozy UI design
//

import SwiftUI

struct TimeSkipModal: View {
    @EnvironmentObject var webSocketService: WebSocketService
    @EnvironmentObject var toastManager: ToastManager
    @Environment(\.dismiss) var dismiss
    @State private var selectedTier: TimeSkipTier?
    @State private var showingConfirmation = false

    var body: some View {
        NavigationView {
            ZStack {
                // Cozy background
                AppColors.background.ignoresSafeArea()

                ScrollView {
                    VStack(spacing: AppSpacing.lg) {
                        // Header with icon and title - enhanced cozy design
                        VStack(spacing: AppSpacing.sm) {
                            ZStack {
                                Circle()
                                    .fill(
                                        LinearGradient(
                                            colors: [Color(red: 0.6, green: 0.7, blue: 0.95), Color(red: 0.7, green: 0.5, blue: 0.9)],
                                            startPoint: .topLeading,
                                            endPoint: .bottomTrailing
                                        )
                                    )
                                    .frame(width: 90, height: 90)
                                    .shadow(color: Color(red: 0.6, green: 0.6, blue: 0.95).opacity(0.4), radius: 12, x: 0, y: 6)

                                Image(systemName: "forward.fill")
                                    .font(.system(size: 45))
                                    .foregroundColor(.white)
                            }

                            Text("Time Skip")
                                .font(.appTitle)
                                .foregroundColor(AppColors.primaryText)

                            Text("Fast forward through time")
                                .font(.appBody)
                                .foregroundColor(AppColors.secondaryText)
                                .multilineTextAlignment(.center)
                        }
                        .padding(.top, AppSpacing.lg)

                        // Current Diamond Balance
                        HStack(spacing: AppSpacing.md) {
                            Spacer()
                            StatCard(
                                icon: "gem.fill",
                                label: "Diamonds",
                                value: "\(webSocketService.person.diamonds)",
                                color: AppColors.diamond
                            )
                            Spacer()
                        }
                        .padding(.horizontal, AppSpacing.md)

                        // Warning Banner
                        WarningBanner()
                            .padding(.horizontal, AppSpacing.md)

                        // Time Skip Tiers
                        VStack(spacing: AppSpacing.md) {
                            ForEach(webSocketService.timeSkipTiers) { tier in
                                TimeSkipTierCard(
                                    tier: tier,
                                    canAfford: webSocketService.person.diamonds >= tier.diamonds
                                ) {
                                    selectedTier = tier
                                    showingConfirmation = true
                                }
                            }
                        }
                        .padding(.horizontal, AppSpacing.md)
                        .padding(.bottom, AppSpacing.xl)
                    }
                }
            }
            .navigationBarTitleDisplayMode(.inline)
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button(action: { dismiss() }) {
                        Image(systemName: "xmark.circle.fill")
                            .font(.title3)
                            .foregroundColor(AppColors.secondaryText)
                    }
                }
            }
            .alert("Confirm Time Skip", isPresented: $showingConfirmation) {
                Button("Cancel", role: .cancel) {
                    selectedTier = nil
                }
                Button("Skip Time") {
                    if let tier = selectedTier {
                        purchaseTier(tier)
                    }
                }
            } message: {
                if let tier = selectedTier {
                    Text("Skip \(tier.displayName) for \(tier.diamonds) diamonds? Events will be simulated.")
                }
            }
        }
        .onAppear {
            webSocketService.fetchTimeSkipTiers()
            AnalyticsManager.shared.trackScreenView("time_skip_modal", screenClass: "TimeSkipModal")
        }
    }

    private func purchaseTier(_ tier: TimeSkipTier) {
        // Check if player has enough diamonds
        guard webSocketService.person.diamonds >= tier.diamonds else {
            toastManager.show(.error, message: "Not enough diamonds!")
            SoundManager.shared.playSound(.error)
            selectedTier = nil
            return
        }

        webSocketService.purchaseTimeSkip(tierType: tier.type)
        AnalyticsManager.shared.track(.purchaseInitiated(
            itemId: "time_skip_\(tier.type)",
            itemName: "Time Skip - \(tier.type)",
            price: tier.diamonds
        ))
        selectedTier = nil
    }
}

// MARK: - Supporting Views

struct WarningBanner: View {
    var body: some View {
        HStack(spacing: AppSpacing.sm) {
            Image(systemName: "exclamationmark.triangle.fill")
                .font(.system(size: 20))
                .foregroundColor(AppColors.warning)

            VStack(alignment: .leading, spacing: 2) {
                Text("Events Will Be Simulated")
                    .font(.appCaptionBold)
                    .foregroundColor(AppColors.primaryText)
                Text("Work, school, and activities continue automatically")
                    .font(.appCaption)
                    .foregroundColor(AppColors.secondaryText)
            }

            Spacer()
        }
        .padding(AppSpacing.md)
        .background(AppColors.warning.opacity(0.15))
        .cornerRadius(AppSpacing.cornerRadius)
        .overlay(
            RoundedRectangle(cornerRadius: AppSpacing.cornerRadius)
                .stroke(AppColors.warning.opacity(0.3), lineWidth: 1)
        )
    }
}

struct TimeSkipTierCard: View {
    let tier: TimeSkipTier
    let canAfford: Bool
    let onPurchase: () -> Void

    var body: some View {
        HStack(spacing: AppSpacing.md) {
            // Icon with premium gradient
            ZStack {
                Circle()
                    .fill(
                        LinearGradient(
                            colors: [Color(red: 0.7, green: 0.8, blue: 0.98).opacity(0.3), Color(red: 0.8, green: 0.6, blue: 0.95).opacity(0.3)],
                            startPoint: .topLeading,
                            endPoint: .bottomTrailing
                        )
                    )
                    .frame(width: 60, height: 60)

                Image(systemName: tier.icon)
                    .font(.system(size: 28))
                    .foregroundColor(Color(red: 0.6, green: 0.6, blue: 0.9))
            }

            // Details
            VStack(alignment: .leading, spacing: 4) {
                Text(tier.displayName)
                    .font(.appHeadline)
                    .foregroundColor(AppColors.primaryText)

                Text(tier.description)
                    .font(.appBody)
                    .foregroundColor(AppColors.secondaryText)
            }

            Spacer()

            // Price button with premium gradient
            Button(action: onPurchase) {
                HStack(spacing: 4) {
                    Text("\(tier.diamonds)")
                        .font(.system(size: 18, weight: .bold, design: .rounded))
                    Image(systemName: "gem.fill")
                        .font(.system(size: 14))
                }
                .foregroundColor(.white)
                .padding(.horizontal, AppSpacing.md)
                .padding(.vertical, AppSpacing.sm)
                .background(
                    canAfford ?
                    LinearGradient(
                        colors: [Color(red: 0.6, green: 0.7, blue: 0.95), Color(red: 0.7, green: 0.5, blue: 0.9)],
                        startPoint: .leading,
                        endPoint: .trailing
                    ) :
                    LinearGradient(
                        colors: [AppColors.disabledText, AppColors.disabledText],
                        startPoint: .leading,
                        endPoint: .trailing
                    )
                )
                .cornerRadius(AppSpacing.pillCornerRadius)
                .shadow(
                    color: canAfford ? Color(red: 0.6, green: 0.6, blue: 0.95).opacity(0.4) : Color.clear,
                    radius: 8,
                    x: 0,
                    y: 4
                )
            }
            .disabled(!canAfford)
        }
        .padding(AppSpacing.md)
        .background(AppColors.surfaceElevated)
        .cornerRadius(20)
        .overlay(
            RoundedRectangle(cornerRadius: 20)
                .stroke(
                    LinearGradient(
                        colors: [Color(red: 0.7, green: 0.8, blue: 0.98).opacity(0.3), Color(red: 0.8, green: 0.6, blue: 0.95).opacity(0.3)],
                        startPoint: .topLeading,
                        endPoint: .bottomTrailing
                    ),
                    lineWidth: 1
                )
        )
        .shadow(
            color: Color.black.opacity(0.06),
            radius: 10,
            x: 0,
            y: 4
        )
    }
}

// MARK: - Preview
// Preview removed - requires backend connection
