//
//  RomanticHeroCard.swift
//  lichunWebsocket
//
//  Romantic hero card showcasing partner with cozy aesthetics
//

import SwiftUI

struct RomanticHeroCard: View {
    let partner: Person
    let relationship: Relationship
    var showHeartAnimation: Bool = true

    private var durationMonths: Int {
        calculateMonths(from: relationship.startDate)
    }

    private var durationText: String {
        if durationMonths == 1 {
            return "💕 1 month together"
        } else if durationMonths < 12 {
            return "💕 \(durationMonths) months together"
        } else {
            let years = durationMonths / 12
            let remainingMonths = durationMonths % 12

            if remainingMonths == 0 {
                return years == 1 ? "💕 1 year together" : "💕 \(years) years together"
            } else {
                return "💕 \(years)y \(remainingMonths)m together"
            }
        }
    }

    var body: some View {
        BaseCard {
            ZStack {
                // Romantic gradient background
                LinearGradient(
                    colors: [
                        Color.pink.opacity(0.12),
                        Color.purple.opacity(0.08),
                        Color.pink.opacity(0.05)
                    ],
                    startPoint: .topLeading,
                    endPoint: .bottomTrailing
                )
                .cornerRadius(AppSpacing.cornerRadius)

                VStack(spacing: AppSpacing.md) {
                    // Partner Avatar with glow
                    CharacterAvatar(
                        person: partner,
                        size: 150,
                        showBorder: true,
                        showGlow: true
                    )

                    // Partner Name
                    Text("\(partner.firstname) \(partner.lastname)")
                        .font(.appLargeTitle)
                        .foregroundColor(AppColors.primaryText)

                    // Age and Occupation
                    HStack(spacing: AppSpacing.xs) {
                        Text("\(partner.ageYears) years old")
                            .font(.appBody)
                            .foregroundColor(AppColors.secondaryText)

                        if !partner.occupation.isEmpty {
                            Text("•")
                                .foregroundColor(AppColors.secondaryText)

                            Text(partner.occupation)
                                .font(.appBody)
                                .foregroundColor(AppColors.secondaryText)
                        }
                    }

                    // Affinity Display
                    VStack(spacing: AppSpacing.xs) {
                        HStack(spacing: AppSpacing.xs) {
                            Image(systemName: "heart.fill")
                                .foregroundColor(AppColors.primary)

                            Text("\(partner.affinity) Affinity")
                                .font(.appHeadline)
                                .foregroundColor(AppColors.primary)
                        }

                        // Affinity Bar
                        GeometryReader { geometry in
                            ZStack(alignment: .leading) {
                                // Background
                                Rectangle()
                                    .fill(AppColors.secondaryText.opacity(0.2))
                                    .frame(height: 8)
                                    .cornerRadius(4)

                                // Gradient Fill
                                Rectangle()
                                    .fill(
                                        LinearGradient(
                                            colors: [
                                                AppColors.error,
                                                AppColors.warning,
                                                AppColors.success
                                            ],
                                            startPoint: .leading,
                                            endPoint: .trailing
                                        )
                                    )
                                    .frame(
                                        width: geometry.size.width * min(CGFloat(partner.affinity) / 100.0, 1.0),
                                        height: 8
                                    )
                                    .cornerRadius(4)
                            }
                        }
                        .frame(height: 8)
                    }
                    .padding(.horizontal, AppSpacing.md)

                    // Duration Text
                    Text(durationText)
                        .font(.appBody)
                        .foregroundColor(AppColors.accent)
                }
                .padding(AppSpacing.lg)
            }
        }
    }

    // MARK: - Helper Methods

    private func calculateMonths(from dateString: String) -> Int {
        // Simple calculation based on events log count as proxy
        // In production, would parse actual date string
        let eventCount = relationship.eventsLog.count

        // Estimate ~1 event per month
        return max(1, eventCount)
    }
}

// MARK: - Preview

#if DEBUG
struct RomanticHeroCard_Previews: PreviewProvider {
    static var previews: some View {
        VStack(spacing: AppSpacing.lg) {
            // High affinity example
            RomanticHeroCard(
                partner: mockPartner(affinity: 92),
                relationship: mockRelationship(months: 10)
            )

            // Medium affinity example
            RomanticHeroCard(
                partner: mockPartner(affinity: 65),
                relationship: mockRelationship(months: 3)
            )

            // Low affinity example
            RomanticHeroCard(
                partner: mockPartner(affinity: 25),
                relationship: mockRelationship(months: 1)
            )
        }
        .padding()
        .background(AppColors.primaryBackground)
    }

    static func mockPartner(affinity: Int) -> Person {
        let person = Person()
        person.id = "partner123"
        person.firstname = "Sarah"
        person.lastname = "Johnson"
        person.ageYears = 28
        person.sex = "Female"
        person.occupation = "Software Engineer"
        person.image = "https://api.dicebear.com/7.x/avataaars/svg?seed=Sarah"
        person.affinity = affinity
        return person
    }

    static func mockRelationship(months: Int) -> Relationship {
        var events: [String] = []
        for i in 0..<months {
            events.append("Event \(i + 1)")
        }

        return Relationship(
            id: "rel123",
            person1: "player123",
            person2: "partner123",
            startDate: "Jan 15, 2024",
            relationshipStatus: "Dating",
            relationshipNotes: "Met at a coffee shop",
            eventsLog: events,
            relationshipScore: 87,
            commonInterests: ["music", "hiking", "cooking"],
            challenges: [],
            futurePlans: []
        )
    }
}
#endif
