//
//  SeasonalParticles.swift
//  lichunWebsocket
//
//  Animated seasonal particle effects for background ambience
//

import SwiftUI

struct SeasonalParticles: View {
    let season: String
    @State private var particles: [ParticleData] = []

    private var particleCount: Int {
        switch season.lowercased() {
        case "spring": return 15  // Flowers
        case "summer": return 20  // Sparkles
        case "autumn", "fall": return 25  // Leaves
        case "winter": return 30  // Snowflakes
        default: return 10
        }
    }

    private var particleEmoji: String {
        switch season.lowercased() {
        case "spring": return ["🌸", "🌼", "🌺", "🏵️"].randomElement() ?? "🌸"
        case "summer": return ["✨", "⭐", "💫", "🌟"].randomElement() ?? "✨"
        case "autumn", "fall": return ["🍂", "🍁", "🍃"].randomElement() ?? "🍂"
        case "winter": return ["❄️", "❆", "❅"].randomElement() ?? "❄️"
        default: return "✨"
        }
    }

    var body: some View {
        ZStack {
            ForEach(particles) { particle in
                Text(particle.emoji)
                    .font(.system(size: particle.size))
                    .opacity(particle.opacity)
                    .offset(x: particle.x, y: particle.y)
                    .rotationEffect(.degrees(particle.rotation))
            }
        }
        .onAppear {
            initializeParticles()
            startAnimation()
        }
    }

    private func initializeParticles() {
        let screenWidth = UIScreen.main.bounds.width
        let screenHeight = UIScreen.main.bounds.height

        particles = (0..<particleCount).map { index in
            let emoji: String
            switch season.lowercased() {
            case "spring": emoji = ["🌸", "🌼", "🌺", "🏵️"].randomElement() ?? "🌸"
            case "summer": emoji = ["✨", "⭐", "💫", "🌟"].randomElement() ?? "✨"
            case "autumn", "fall": emoji = ["🍂", "🍁", "🍃"].randomElement() ?? "🍂"
            case "winter": emoji = ["❄️", "❆", "❅"].randomElement() ?? "❄️"
            default: emoji = "✨"
            }

            return ParticleData(
                id: UUID(),
                emoji: emoji,
                x: CGFloat.random(in: -screenWidth/2...screenWidth/2),
                y: -screenHeight/2 - CGFloat.random(in: 0...200),
                size: CGFloat.random(in: 12...24),
                opacity: Double.random(in: 0.3...0.8),
                rotation: Double.random(in: 0...360),
                duration: Double.random(in: 8...15),
                delay: Double.random(in: 0...5)
            )
        }
    }

    private func startAnimation() {
        let screenHeight = UIScreen.main.bounds.height

        for index in particles.indices {
            let particle = particles[index]

            withAnimation(
                .linear(duration: particle.duration)
                .repeatForever(autoreverses: false)
                .delay(particle.delay)
            ) {
                particles[index].y = screenHeight/2 + 200
                particles[index].rotation = Double.random(in: 360...720)
            }

            // Horizontal drift for more natural movement
            withAnimation(
                .easeInOut(duration: particle.duration/2)
                .repeatForever(autoreverses: true)
                .delay(particle.delay)
            ) {
                particles[index].x += CGFloat.random(in: -50...50)
            }
        }
    }
}

// MARK: - Particle Data Model

struct ParticleData: Identifiable {
    let id: UUID
    let emoji: String
    var x: CGFloat
    var y: CGFloat
    let size: CGFloat
    var opacity: Double
    var rotation: Double
    let duration: Double
    let delay: Double
}

// MARK: - Preview

#Preview {
    ZStack {
        AppColors.background
            .ignoresSafeArea()

        VStack(spacing: 40) {
            Text("Spring 🌸")
                .font(.title)
            SeasonalParticles(season: "Spring")
                .frame(height: 200)

            Text("Summer ☀️")
                .font(.title)
            SeasonalParticles(season: "Summer")
                .frame(height: 200)

            Text("Autumn 🍂")
                .font(.title)
            SeasonalParticles(season: "Autumn")
                .frame(height: 200)

            Text("Winter ❄️")
                .font(.title)
            SeasonalParticles(season: "Winter")
                .frame(height: 200)
        }
    }
}
