package main

// PlayerState — состояние одного игрока в партии.
type PlayerState struct {
	Name    string
	Hand    []Card
	IsHuman bool
	Balance int // текущий капитал игрока (в условных фишках/деньгах)
}

// HandValue — суммарная очковая стоимость карт на руке игрока.
func (p *PlayerState) HandValue() int {
	return HandValue(p.Hand)
}

// HasCard проверяет наличие конкретной карты на руке.
func (p *PlayerState) HasCard(c Card) bool {
	for _, card := range p.Hand {
		if card == c {
			return true
		}
	}
	return false
}

// RemoveCard удаляет карту из руки, если она там есть. Возвращает
// false, если карты не было (вызывающий код должен считать это
// программной ошибкой, а не игровой ситуацией).
func (p *PlayerState) RemoveCard(c Card) bool {
	for i, card := range p.Hand {
		if card == c {
			p.Hand = append(p.Hand[:i], p.Hand[i+1:]...)
			return true
		}
	}
	return false
}

// RemoveCards удаляет несколько карт разом. Если хотя бы одной не
// было на руке — не удаляет ничего и возвращает false.
func (p *PlayerState) RemoveCards(cards []Card) bool {
	for _, c := range cards {
		if !p.HasCard(c) {
			return false
		}
	}
	for _, c := range cards {
		p.RemoveCard(c)
	}
	return true
}
