//
//  DailyQuest.swift
//  lichunWebsocket
//
//  Daily quest system models with progress tracking
//

import Foundation

struct DailyQuestsState: Codable {
    let quests: [DailyQuest]
    let lastResetDate: String
    let nextResetDate: String
}

struct DailyQuest: Identifiable, Codable {
    let id: String
    let name: String
    let description: String
    let category: QuestCategory
    let reward: QuestReward
    let progress: Int
    let target: Int
    var completed: Bool
    var claimed: Bool

    enum QuestCategory: String, Codable {
        case social = "Social"
        case career = "Career"
        case activities = "Activities"
        case education = "Education"
        case wealth = "Wealth"

        var icon: String {
            switch self {
            case .social:
                return "person.2.fill"
            case .career:
                return "briefcase.fill"
            case .activities:
                return "figure.run"
            case .education:
                return "book.fill"
            case .wealth:
                return "dollarsign.circle.fill"
            }
        }

        var color: String {
            switch self {
            case .social:
                return "pink"
            case .career:
                return "blue"
            case .activities:
                return "green"
            case .education:
                return "purple"
            case .wealth:
                return "yellow"
            }
        }
    }

    var progressPercentage: Double {
        guard target > 0 else { return completed ? 1.0 : 0.0 }
        return min(Double(progress) / Double(target), 1.0)
    }

    var progressText: String {
        "\(progress)/\(target)"
    }

    var canClaim: Bool {
        completed && !claimed
    }
}

struct QuestReward: Codable {
    let diamonds: Int
    let energy: Int?
    let money: Int?

    var displayReward: String {
        var parts: [String] = []
        if diamonds > 0 {
            parts.append("\(diamonds) Diamonds")
        }
        if let energy = energy, energy > 0 {
            parts.append("\(energy) Energy")
        }
        if let money = money, money > 0 {
            parts.append("$\(money)")
        }
        return parts.joined(separator: " + ")
    }
}
