//
//  OfflineDigestView.swift
//  lichunWebsocket
//
//  "While you were away" welcome-back card. Shown once on connect when the
//  server delivers an offline digest (via the `offlineDigest` message or inside
//  playerObject.offlineStats.digest). Summarizes time away, money/age deltas,
//  and the top notable events that fired during the offline simulation.
//

import SwiftUI

struct OfflineDigestView: View {
    let digest: OfflineDigest
    var onDismiss: () -> Void

    @State private var isLoaded = false

    var body: some View {
        ZStack {
            AppColors.primaryBackground
                .edgesIgnoringSafeArea(.all)

            ScrollView {
                VStack(spacing: AppSpacing.lg) {
                    header

                    deltasCard

                    notableEventsCard

                    Button {
                        hapticFeedback(style: .light)
                        onDismiss()
                    } label: {
                        Text("Continue")
                            .font(.appHeadline)
                            .foregroundColor(.white)
                            .frame(maxWidth: .infinity)
                            .frame(height: AppSpacing.buttonHeight)
                            .background(AppColors.primary)
                            .cornerRadius(AppSpacing.pillCornerRadius)
                    }
                    .buttonStyle(SquishButtonStyle())
                }
                .padding(AppSpacing.lg)
            }
        }
        .onAppear {
            withAnimation(.spring(response: 0.6, dampingFraction: 0.8)) {
                isLoaded = true
            }
        }
    }

    // MARK: - Header

    private var header: some View {
        VStack(spacing: AppSpacing.sm) {
            Image(systemName: "moon.stars.fill")
                .font(.system(size: 40))
                .foregroundColor(AppColors.secondary)
                .scaleEffect(isLoaded ? 1 : 0.6)

            Text("Welcome Back")
                .font(.system(size: 26, weight: .bold, design: .rounded))
                .foregroundColor(AppColors.primaryText)

            Text(digest.timeAwayDescription)
                .font(.appBody)
                .foregroundColor(AppColors.secondaryText)
        }
        .padding(.top, AppSpacing.lg)
    }

    // MARK: - Deltas

    private var deltasCard: some View {
        BaseCard {
            VStack(spacing: AppSpacing.md) {
                deltaRow(
                    icon: "dollarsign.circle.fill",
                    label: "Money",
                    value: signedMoney(digest.moneyDelta),
                    tint: digest.moneyDelta >= 0 ? AppColors.money : AppColors.loveInterest
                )

                if digest.ageYearsDelta > 0 {
                    deltaRow(
                        icon: "birthday.cake.fill",
                        label: "Aged",
                        value: "+\(digest.ageYearsDelta) year\(digest.ageYearsDelta == 1 ? "" : "s")",
                        tint: AppColors.happiness
                    )
                }
            }
        }
    }

    private func deltaRow(icon: String, label: String, value: String, tint: Color) -> some View {
        HStack {
            Image(systemName: icon)
                .font(.system(size: 18))
                .foregroundColor(tint)
                .frame(width: 26)
            Text(label)
                .font(.appBody)
                .foregroundColor(AppColors.secondaryText)
            Spacer()
            Text(value)
                .font(.appHeadline)
                .foregroundColor(AppColors.primaryText)
        }
    }

    // MARK: - Notable events

    @ViewBuilder
    private var notableEventsCard: some View {
        if !digest.notableEvents.isEmpty {
            BaseCard {
                VStack(alignment: .leading, spacing: AppSpacing.sm) {
                    Text("While you were away")
                        .font(.appHeadline)
                        .foregroundColor(AppColors.primaryText)

                    ForEach(Array(digest.notableEvents.enumerated()), id: \.offset) { _, event in
                        HStack(alignment: .top, spacing: AppSpacing.sm) {
                            Image(systemName: "sparkle")
                                .font(.system(size: 12))
                                .foregroundColor(AppColors.primary)
                                .padding(.top, 3)
                            Text(event)
                                .font(.appBody)
                                .foregroundColor(AppColors.secondaryText)
                                .fixedSize(horizontal: false, vertical: true)
                        }
                    }
                }
                .frame(maxWidth: .infinity, alignment: .leading)
            }
        }
    }

    // MARK: - Helpers

    private func signedMoney(_ amount: Int) -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = 0
        let magnitude = formatter.string(from: NSNumber(value: abs(amount))) ?? "\(abs(amount))"
        let sign = amount >= 0 ? "+" : "-"
        return "\(sign)$\(magnitude)"
    }
}

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