import Foundation

enum AllocationTargetStore {
    private static let targetsKey = "allocationTargets"

    static func target(for categoryId: UUID) -> Double? {
        loadTargets()[categoryId.uuidString]
    }

    static func setTarget(_ value: Double?, for categoryId: UUID) {
        var targets = loadTargets()
        let key = categoryId.uuidString
        if let value, value > 0 {
            targets[key] = value
        } else {
            targets.removeValue(forKey: key)
        }
        saveTargets(targets)
    }

    static func totalTargetPercentage(for categoryIds: [UUID]) -> Double {
        let targets = loadTargets()
        return categoryIds.reduce(0) { total, id in
            total + (targets[id.uuidString] ?? 0)
        }
    }

    private static func loadTargets() -> [String: Double] {
        guard let data = UserDefaults.standard.data(forKey: targetsKey),
              let decoded = try? JSONDecoder().decode([String: Double].self, from: data) else {
            return [:]
        }
        return decoded
    }

    private static func saveTargets(_ targets: [String: Double]) {
        if let data = try? JSONEncoder().encode(targets) {
            UserDefaults.standard.set(data, forKey: targetsKey)
        }
    }
}
