import ActivityKit
import CoreGraphics
import Foundation

struct CharacterLiveActivityAttributes: ActivityAttributes {
    struct ContentState: Codable, Hashable {
        var gameDate: String
        var gameTime: String
        var age: Int
        var season: String
        var location: String
        var statusMessage: String
        var energy: Int
        var health: Int
        var happiness: Int
        var speedLabel: String
        var isRunning: Bool
        var updatedAt: String
    }

    var characterId: String
    var characterName: String
    var avatarCacheKey: String
    var startedAt: Date
}

enum LiveActivitySharedConfiguration {
    static let appGroupIdentifier = "group.lichun.lichunWebsocket"
    static let avatarPixelSize: CGFloat = 96
    static let appURL = URL(string: "baolife://home")

    static func avatarFilename(for cacheKey: String) -> String {
        "\(cacheKey).png"
    }

    static func sharedContainerURL() -> URL? {
        FileManager.default.containerURL(
            forSecurityApplicationGroupIdentifier: appGroupIdentifier
        )
    }

    static func avatarURL(for cacheKey: String) -> URL? {
        sharedContainerURL()?.appendingPathComponent(avatarFilename(for: cacheKey))
    }
}

enum LiveActivityAvatarFallback {
    static func initials(for characterName: String) -> String {
        let parts = characterName
            .split(whereSeparator: { $0.isWhitespace })
            .compactMap { $0.first }
            .prefix(2)

        let initials = parts.map { String($0).uppercased() }.joined()
        return initials.isEmpty ? "B" : initials
    }
}
