//
//  MoreView.swift
//  lichunWebsocket
//
//  Cozy redesigned menu with card-based layout and warm colors
//

import SwiftUI

struct MoreView: View {
    @EnvironmentObject var appViewModel: AppViewModel
    @EnvironmentObject var webSocketService: WebSocketService

    // Badge indicators
    private var hasDailyRewardAvailable: Bool {
        if let state = webSocketService.dailyRewardState {
            return state.canClaim && !state.todaysClaimed
        }
        return false
    }

    private var dailyQuestsClaimableCount: Int {
        if let state = webSocketService.dailyQuestsState {
            return state.quests.filter { $0.canClaim }.count
        }
        return 0
    }

    var body: some View {
        NavigationView {
            ScrollView(showsIndicators: false) {
                VStack(spacing: AppSpacing.md) {
                    // Header
                    VStack(spacing: AppSpacing.xs) {
                        Text("More")
                            .font(.appDisplayTitle)
                            .foregroundColor(AppColors.primaryText)

                        Text("Explore features and options")
                            .font(.appCaption)
                            .foregroundColor(AppColors.secondaryText)
                    }
                    .padding(.top, AppSpacing.lg)
                    .padding(.bottom, AppSpacing.sm)

                    // Game Features Section
                    VStack(alignment: .leading, spacing: AppSpacing.sm) {
                        SectionHeader(title: "Game Features")

                        LazyVGrid(columns: [
                            GridItem(.flexible(), spacing: AppSpacing.sm),
                            GridItem(.flexible(), spacing: AppSpacing.sm)
                        ], spacing: AppSpacing.sm) {
                            // Characters
                            NavigationLink(destination: RelationshipsView(), isActive: $appViewModel.shouldNavigateToRelationships) {
                                CozyMenuCard(
                                    icon: "person.2.fill",
                                    title: "Characters",
                                    color: AppColors.friend
                                )
                            }
                            .buttonStyle(PlainButtonStyle())
                            .environmentObject(appViewModel)

                            // Store
                            NavigationLink(destination: StoreView()) {
                                CozyMenuCard(
                                    icon: "storefront.fill",
                                    title: "Store",
                                    color: AppColors.accent
                                )
                            }
                            .buttonStyle(PlainButtonStyle())

                            // Items
                            NavigationLink(destination: ItemsView()) {
                                CozyMenuCard(
                                    icon: "shippingbox.fill",
                                    title: "Items",
                                    color: AppColors.money
                                )
                            }
                            .buttonStyle(PlainButtonStyle())

                            // Achievements
                            NavigationLink(destination: AchievementsView()) {
                                CozyMenuCard(
                                    icon: "trophy.fill",
                                    title: "Achievements",
                                    color: AppColors.prestige
                                )
                            }
                            .buttonStyle(PlainButtonStyle())
                        }
                    }
                    .padding(.horizontal, AppSpacing.md)

                    // Progression Section (Wave 2: goals / collection / prestige)
                    VStack(alignment: .leading, spacing: AppSpacing.sm) {
                        SectionHeader(title: "Progression")

                        LazyVGrid(columns: [
                            GridItem(.flexible(), spacing: AppSpacing.sm),
                            GridItem(.flexible(), spacing: AppSpacing.sm)
                        ], spacing: AppSpacing.sm) {
                            // Life Goals
                            NavigationLink(destination: LifeGoalsView()) {
                                CozyMenuCard(
                                    icon: "target",
                                    title: "Life Goals",
                                    color: AppColors.prestige
                                )
                            }
                            .buttonStyle(PlainButtonStyle())

                            // Collection (achievements by category)
                            NavigationLink(destination: AchievementCollectionView()) {
                                CozyMenuCard(
                                    icon: "square.grid.2x2.fill",
                                    title: "Collection",
                                    color: AppColors.intelligence
                                )
                            }
                            .buttonStyle(PlainButtonStyle())

                            // Prestige
                            NavigationLink(destination: PrestigeView()) {
                                CozyMenuCard(
                                    icon: "star.circle.fill",
                                    title: "Prestige",
                                    color: AppColors.family
                                )
                            }
                            .buttonStyle(PlainButtonStyle())

                            // Do an Activity (performActivity)
                            Button(action: {
                                appViewModel.showPerformActivity = true
                            }) {
                                CozyMenuCard(
                                    icon: "bolt.heart.fill",
                                    title: "Do an Activity",
                                    color: AppColors.success
                                )
                            }
                            .buttonStyle(PlainButtonStyle())
                        }
                    }
                    .padding(.horizontal, AppSpacing.md)

                    // Daily Activities Section
                    VStack(alignment: .leading, spacing: AppSpacing.sm) {
                        SectionHeader(title: "Daily Activities")

                        // Daily Rewards
                        Button(action: {
                            webSocketService.showDailyRewards = true
                        }) {
                            CozyMenuListItem(
                                icon: "calendar.badge.clock",
                                title: "Daily Rewards",
                                subtitle: dailyRewardSubtitle,
                                color: AppColors.happiness,
                                hasBadge: hasDailyRewardAvailable
                            )
                        }
                        .buttonStyle(PlainButtonStyle())

                        // Daily Quests
                        Button(action: {
                            webSocketService.showDailyQuests = true
                        }) {
                            CozyMenuListItem(
                                icon: "checklist",
                                title: "Daily Quests",
                                subtitle: dailyQuestsSubtitle,
                                color: AppColors.intelligence,
                                hasBadge: dailyQuestsClaimableCount > 0
                            )
                        }
                        .buttonStyle(PlainButtonStyle())
                    }
                    .padding(.horizontal, AppSpacing.md)

                    // Special Actions Section
                    VStack(alignment: .leading, spacing: AppSpacing.sm) {
                        SectionHeader(title: "Special Actions")

                        Button(action: {
                            webSocketService.showTimeSkipModal = true
                        }) {
                            CozyMenuListItem(
                                icon: "forward.fill",
                                title: "Time Skip",
                                subtitle: "Jump ahead in time",
                                color: AppColors.primary
                            )
                        }
                        .buttonStyle(PlainButtonStyle())
                    }
                    .padding(.horizontal, AppSpacing.md)

                    Spacer(minLength: AppSpacing.xl)
                }
                .padding(.bottom, AppSpacing.xl)
            }
            .background(AppColors.background)
            .navigationBarHidden(true)
            .onAppear {
                if appViewModel.shouldNavigateToRelationships {
                    appViewModel.shouldNavigateToRelationships = false
                }
            }
        }
    }

    // MARK: - Helpers

    private var dailyRewardSubtitle: String? {
        if let state = webSocketService.dailyRewardState {
            if state.currentStreak > 0 {
                return "\(state.currentStreak) day streak"
            }
        }
        return nil
    }

    private var dailyQuestsSubtitle: String? {
        let count = dailyQuestsClaimableCount
        if count > 0 {
            return "\(count) ready to claim"
        }
        return nil
    }
}

// MARK: - Section Header

struct SectionHeader: View {
    let title: String

    var body: some View {
        Text(title)
            .font(.appHeadline)
            .foregroundColor(AppColors.primaryText)
            .padding(.top, AppSpacing.xs)
    }
}

// MARK: - Cozy Menu Card (Grid Item)

struct CozyMenuCard: View {
    let icon: String
    let title: String
    let color: Color

    var body: some View {
        BaseCard(
            backgroundColor: AppColors.surfaceElevated,
            showShadow: true
        ) {
            VStack(spacing: AppSpacing.sm) {
                // Icon with background circle
                ZStack {
                    Circle()
                        .fill(color.opacity(0.15))
                        .frame(width: 56, height: 56)

                    Image(systemName: icon)
                        .font(.system(size: 26))
                        .foregroundColor(color)
                }

                // Title
                Text(title)
                    .font(.appBodyBold)
                    .foregroundColor(AppColors.primaryText)
                    .multilineTextAlignment(.center)
                    .lineLimit(2)
            }
            .frame(maxWidth: .infinity)
            .padding(.vertical, AppSpacing.xs)
        }
        .frame(height: 120)
    }
}

// MARK: - Cozy Menu List Item (Full Width)

struct CozyMenuListItem: View {
    let icon: String
    let title: String
    let subtitle: String?
    let color: Color
    var hasBadge: Bool = false

    var body: some View {
        BaseCard(
            backgroundColor: AppColors.surfaceElevated,
            showShadow: true
        ) {
            HStack(spacing: AppSpacing.md) {
                // Icon with background circle
                ZStack {
                    Circle()
                        .fill(color.opacity(0.15))
                        .frame(width: 44, height: 44)

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

                    // Badge indicator
                    if hasBadge {
                        Circle()
                            .fill(AppColors.error)
                            .frame(width: 10, height: 10)
                            .overlay(
                                Circle()
                                    .strokeBorder(AppColors.surfaceElevated, lineWidth: 2)
                            )
                            .offset(x: 16, y: -16)
                    }
                }

                // Text content
                VStack(alignment: .leading, spacing: 2) {
                    Text(title)
                        .font(.appBodyBold)
                        .foregroundColor(AppColors.primaryText)

                    if let subtitle = subtitle {
                        Text(subtitle)
                            .font(.appCaption)
                            .foregroundColor(AppColors.secondaryText)
                    }
                }

                Spacer()

                // Chevron
                Image(systemName: "chevron.right")
                    .font(.system(size: 14, weight: .semibold))
                    .foregroundColor(AppColors.secondaryText)
            }
        }
    }
}

// MARK: - Preview

struct MoreView_Previews: PreviewProvider {
    static var previews: some View {
        MoreView()
            .environmentObject(WebSocketService(urlSession: URLSession.shared, delegateQueue: OperationQueue()))
            .environmentObject(AppViewModel())
    }
}
