import Foundation

enum GameVariant: String, CaseIterable, Codable, Identifiable, Sendable {
    case klondike
    case spider
    case freeCell

    var id: String { rawValue }

    var displayName: String {
        switch self {
        case .klondike: "Klondike"
        case .spider: "Spider"
        case .freeCell: "FreeCell"
        }
    }

    var tableauCount: Int {
        switch self {
        case .klondike: 7
        case .spider: 10
        case .freeCell: 8
        }
    }

    var foundationCount: Int {
        switch self {
        case .klondike: 4
        case .spider: 8
        case .freeCell: 4
        }
    }

    var deckCount: Int {
        switch self {
        case .klondike, .freeCell: 1
        case .spider: 2
        }
    }

    var hasWaste: Bool {
        switch self {
        case .klondike, .spider: true
        case .freeCell: false
        }
    }

    var hasFreeCells: Bool {
        self == .freeCell
    }

    var freeCellCount: Int {
        switch self {
        case .freeCell: 4
        case .klondike, .spider: 0
        }
    }

    var hasStock: Bool {
        switch self {
        case .klondike, .spider: true
        case .freeCell: false
        }
    }
}
