//
//  CozyHeaderView.swift
//  lichunWebsocket
//
//  Warm, seasonal header with gradient background
//

import SwiftUI

struct CozyHeaderView: View {
    @EnvironmentObject var webSocketService: WebSocketService

    var seasonIcon: String {
        switch webSocketService.player.season.lowercased() {
        case "spring": return "leaf.fill"
        case "summer": return "sun.max.fill"
        case "autumn", "fall": return "leaf.fill"
        case "winter": return "snowflake"
        default: return "calendar"
        }
    }

    var formattedDateTime: String {
        if !webSocketService.player.date.isEmpty {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "MM-dd"

            if let date = dateFormatter.date(from: webSocketService.player.date) {
                dateFormatter.dateFormat = "EEE"
                let formattedDate = dateFormatter.string(from: date)

                let hour = webSocketService.player.hourOfDay
                let minute = webSocketService.player.minuteOfHour

                let formattedTime: String
                if hour < 12 {
                    formattedTime = String(format: "%02d:%02d am", hour, minute)
                } else {
                    formattedTime = String(format: "%02d:%02d pm", hour % 12 == 0 ? 12 : hour % 12, minute)
                }

                return "\(formattedDate) \(formattedTime)"
            }
        }
        return ""
    }

    func monthEmojiAndAbbreviation() -> String {
        let dateParts = webSocketService.player.date.split(separator: "-").map(String.init)
        let monthAbbreviations = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

        if let monthStr = dateParts.first, let month = Int(monthStr), month > 0 && month <= 12 {
            let dayStr = dateParts.count > 1 ? dateParts[1] : ""
            return "\(monthAbbreviations[month - 1]) \(dayStr)"
        }
        return ""
    }

    var body: some View {
        ZStack {
            // Seasonal gradient background with blur
            AppColors.cozySeasonGradient(webSocketService.player.season)
                .blur(radius: 20)
                .overlay(
                    // Subtle pattern overlay
                    Image(systemName: "circle.grid.cross.fill")
                        .resizable(resizingMode: .tile)
                        .foregroundColor(.white)
                        .opacity(0.05)
                )

            // Content
            HStack(alignment: .top, spacing: AppSpacing.md) {
                // Left: Date & Season
                VStack(alignment: .leading, spacing: 4) {
                    HStack(spacing: 6) {
                        Image(systemName: seasonIcon)
                            .font(.system(size: 14))
                            .foregroundColor(AppColors.primaryText)
                        Text(monthEmojiAndAbbreviation())
                            .font(.system(size: 13, weight: .semibold, design: .rounded))
                            .foregroundColor(AppColors.primaryText)
                    }

                    Text(formattedDateTime)
                        .font(.system(size: 11, weight: .medium, design: .rounded))
                        .foregroundColor(AppColors.secondaryText)
                }
                .padding(.horizontal, 12)
                .padding(.vertical, 8)
                .background(Color.white.opacity(0.3))
                .cornerRadius(12)
                .shadow(color: Color.black.opacity(0.05), radius: 4, x: 0, y: 2)

                Spacer()

                // Center: Status message
                if !webSocketService.person.intraDayMessage.isEmpty {
                    HStack(spacing: 6) {
                        Image(systemName: "sparkles")
                            .font(.system(size: 12))
                        Text(webSocketService.person.intraDayMessage)
                            .font(.system(size: 12, weight: .medium, design: .rounded))
                            .lineLimit(1)
                    }
                    .foregroundColor(AppColors.accent)
                    .padding(.horizontal, 12)
                    .padding(.vertical, 8)
                    .background(AppColors.accent.opacity(0.15))
                    .cornerRadius(12)
                }

                Spacer()

                // Right: Resources
                VStack(alignment: .trailing, spacing: 6) {
                    // Energy
                    ResourceBadge(
                        icon: "bolt.fill",
                        value: "\(webSocketService.person.calcEnergy)",
                        color: AppColors.energy
                    )

                    // Money
                    ResourceBadge(
                        icon: "dollarsign.circle.fill",
                        value: "\(webSocketService.person.money)",
                        color: AppColors.money
                    )

                    // Diamonds
                    ResourceBadge(
                        icon: "gem.fill",
                        value: "\(webSocketService.person.diamonds)",
                        color: AppColors.diamond
                    )
                }
            }
            .padding(.horizontal, AppSpacing.md)
        }
        .frame(height: 100)
    }
}

struct ResourceBadge: View {
    let icon: String
    let value: String
    let color: Color

    var body: some View {
        HStack(spacing: 4) {
            Image(systemName: icon)
                .font(.system(size: 12))
                .foregroundColor(color)
            Text(value)
                .font(.system(size: 14, weight: .bold, design: .rounded))
                .foregroundColor(AppColors.primaryText)
        }
        .padding(.horizontal, 10)
        .padding(.vertical, 5)
        .background(color.opacity(0.15))
        .cornerRadius(10)
    }
}
