import Foundation

struct Card: Identifiable, Equatable, Hashable, Codable, Sendable {
    let id: UUID
    let suit: Suit
    let rank: Rank
    var isFaceUp: Bool

    init(suit: Suit, rank: Rank, isFaceUp: Bool = false) {
        self.id = UUID()
        self.suit = suit
        self.rank = rank
        self.isFaceUp = isFaceUp
    }

    var color: Suit.Color { suit.color }

    var accessibilityDescription: String {
        if isFaceUp {
            "\(rank.displayName) of \(suit.displayName)"
        } else {
            "Card, face down"
        }
    }

    func frontImageName(style: CardFaceStyle) -> String {
        "\(style.rawValue)_\(suit.rawValue)_\(rank.fileName)"
    }
}

enum CardFaceStyle: String, CaseIterable, Codable, Sendable {
    case classic, modern, extracted
}

enum CardBackDesign: Int, CaseIterable, Codable, Sendable {
    case abstractClouds = 1
    case abstractScene
    case abstract
    case astronaut
    case blue
    case blue2
    case cars
    case castle
    case fish
    case frog
    case red
    case red2

    var imageName: String {
        "back_\(String(format: "%02d", rawValue))"
    }
}
