//
//  TimeSkipSummaryView.swift
//  lichunWebsocket
//
//  Time skip summary view showing simulated events with cozy UI design
//

import SwiftUI

struct TimeSkipSummaryView: View {
    @EnvironmentObject var webSocketService: WebSocketService
    @Environment(\.dismiss) var dismiss

    var summary: TimeSkipSummary? {
        webSocketService.lastTimeSkipSummary
    }

    var body: some View {
        NavigationView {
            ZStack {
                // Cozy background with subtle gradient
                LinearGradient(
                    colors: [AppColors.background, AppColors.surfaceSubtle],
                    startPoint: .topLeading,
                    endPoint: .bottomTrailing
                )
                .ignoresSafeArea()

                ScrollView {
                    VStack(spacing: AppSpacing.lg) {
                        // Header with icon
                        VStack(spacing: AppSpacing.sm) {
                            ZStack {
                                Circle()
                                    .fill(AppColors.secondary.opacity(0.2))
                                    .frame(width: 100, height: 100)

                                Image(systemName: "forward.fill")
                                    .font(.system(size: 50))
                                    .foregroundColor(AppColors.secondary)
                            }

                            Text("Time Skipped!")
                                .font(.appTitle)
                                .foregroundColor(AppColors.primaryText)

                            if let summary = summary {
                                Text("Advanced \(Int(summary.durationHours)) hours")
                                    .font(.appBody)
                                    .foregroundColor(AppColors.secondaryText)
                            }
                        }
                        .padding(.top, AppSpacing.lg)

                        // Stat Changes Grid
                        if let summary = summary {
                            StatChangesGrid(changes: summary.statChanges)
                                .padding(.horizontal, AppSpacing.md)

                            // Events Summary
                            if !summary.events.isEmpty {
                                VStack(alignment: .leading, spacing: AppSpacing.md) {
                                    Text("What Happened")
                                        .font(.appHeadline)
                                        .foregroundColor(AppColors.primaryText)
                                        .padding(.horizontal, AppSpacing.md)

                                    ForEach(summary.events) { event in
                                        EventRow(event: event)
                                    }
                                }
                                .padding(.vertical, AppSpacing.sm)
                            }
                        }

                        // Continue Button
                        Button(action: {
                            dismiss()
                        }) {
                            Text("Continue")
                                .font(.appHeadline)
                                .foregroundColor(.white)
                                .frame(maxWidth: .infinity)
                                .padding(.vertical, AppSpacing.md)
                                .background(
                                    LinearGradient(
                                        colors: [AppColors.primary, AppColors.primaryDark],
                                        startPoint: .leading,
                                        endPoint: .trailing
                                    )
                                )
                                .cornerRadius(AppSpacing.cornerRadius)
                                .shadow(
                                    color: AppColors.primary.opacity(0.3),
                                    radius: AppSpacing.Shadow.radiusMedium,
                                    x: 0,
                                    y: AppSpacing.Shadow.offsetY
                                )
                        }
                        .padding(.horizontal, AppSpacing.md)
                        .padding(.bottom, AppSpacing.xl)
                    }
                }
            }
            .navigationBarTitleDisplayMode(.inline)
        }
    }
}

// MARK: - Supporting Views

struct StatChangesGrid: View {
    let changes: TimeSkipSummary.StatChanges

    var body: some View {
        LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: AppSpacing.md) {
            StatChangeCard(icon: "dollarsign.circle.fill", label: "Money", value: changes.money, color: AppColors.money)
            StatChangeCard(icon: "bolt.fill", label: "Energy", value: changes.energy, color: AppColors.energy)
            StatChangeCard(icon: "heart.fill", label: "Health", value: changes.health, color: AppColors.health)
            StatChangeCard(icon: "face.smiling.fill", label: "Happiness", value: changes.happiness, color: AppColors.happiness)
        }
    }
}

struct StatChangeCard: View {
    let icon: String
    let label: String
    let value: Int
    let color: Color

    var changeColor: Color {
        value >= 0 ? AppColors.success : AppColors.error
    }

    var displayValue: String {
        value >= 0 ? "+\(value)" : "\(value)"
    }

    var body: some View {
        VStack(spacing: AppSpacing.xs) {
            Image(systemName: icon)
                .font(.system(size: 28))
                .foregroundColor(color)

            Text(displayValue)
                .font(.system(size: 24, weight: .bold, design: .rounded))
                .foregroundColor(changeColor)

            Text(label)
                .font(.appCaption)
                .foregroundColor(AppColors.secondaryText)
        }
        .frame(maxWidth: .infinity)
        .padding(AppSpacing.md)
        .background(color.opacity(0.1))
        .cornerRadius(AppSpacing.cornerRadius)
        .overlay(
            RoundedRectangle(cornerRadius: AppSpacing.cornerRadius)
                .stroke(color.opacity(0.3), lineWidth: 1)
        )
    }
}

struct EventRow: View {
    let event: TimeSkipEvent

    var icon: String {
        switch event.type {
        case "work": return "briefcase.fill"
        case "school": return "book.fill"
        case "summary": return "chart.bar.fill"
        default: return "circle.fill"
        }
    }

    var iconColor: Color {
        switch event.type {
        case "work": return AppColors.money
        case "school": return AppColors.intelligence
        case "summary": return AppColors.info
        default: return AppColors.secondary
        }
    }

    var body: some View {
        HStack(spacing: AppSpacing.md) {
            // Icon
            ZStack {
                Circle()
                    .fill(iconColor.opacity(0.15))
                    .frame(width: 44, height: 44)

                Image(systemName: icon)
                    .font(.system(size: 20))
                    .foregroundColor(iconColor)
            }

            // Content
            VStack(alignment: .leading, spacing: 4) {
                Text(event.description)
                    .font(.appBody)
                    .foregroundColor(AppColors.primaryText)

                HStack(spacing: AppSpacing.sm) {
                    if let money = event.moneyEarned, money > 0 {
                        HStack(spacing: 2) {
                            Image(systemName: "dollarsign.circle.fill")
                                .font(.system(size: 12))
                            Text("+\(money)")
                                .font(.appCaption)
                        }
                        .foregroundColor(AppColors.money)
                    }

                    if let smarts = event.smartsGained, smarts > 0 {
                        HStack(spacing: 2) {
                            Image(systemName: "brain.head.profile")
                                .font(.system(size: 12))
                            Text("+\(smarts)")
                                .font(.appCaption)
                        }
                        .foregroundColor(AppColors.intelligence)
                    }
                }
            }

            Spacer()
        }
        .padding(AppSpacing.md)
        .background(AppColors.surfaceElevated)
        .cornerRadius(AppSpacing.smallCornerRadius)
        .padding(.horizontal, AppSpacing.md)
        .shadow(
            color: Color.black.opacity(0.03),
            radius: AppSpacing.Shadow.radiusSoft,
            x: 0,
            y: 2
        )
    }
}

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