//
//  Hand.swift
//  Baccarat
//
//  Represents a baccarat hand (Player or Banker) with cards and scoring.
//

import Foundation
import CasinoKit

/// Represents a hand of cards in baccarat.
struct Hand: Identifiable {
    let id = UUID()
    private(set) var cards: [Card] = []
    
    /// The total baccarat value of the hand (0-9).
    var value: Int {
        let total = cards.reduce(0) { $0 + $1.baccaratValue }
        return total % 10
    }
    
    /// Whether this hand is a "natural" (8 or 9 on first two cards).
    var isNatural: Bool {
        cards.count == 2 && value >= 8
    }
    
    /// The number of cards in this hand.
    var cardCount: Int {
        cards.count
    }
    
    /// Adds a card to the hand.
    /// - Parameter card: The card to add.
    mutating func addCard(_ card: Card) {
        cards.append(card)
    }
    
    /// Clears all cards from the hand.
    mutating func clear() {
        cards = []
    }
    
    /// Returns the third card if one was drawn, nil otherwise.
    var thirdCard: Card? {
        cards.count >= 3 ? cards[2] : nil
    }
}

