package main

// BlackjackBot — единственная (без градации уровней) стратегия
// бота для Блэкджека: играет по упрощённой базовой стратегии —
// берёт карту, пока сумма меньше 17 (как и дилер), и удваивает
// ставку на жёсткой сумме 11 из первых двух карт, если хватает
// капитала.
type BlackjackBot struct{}

// DecideAction решает, что делать текущему игроку: "hit", "stand"
// или "double".
func (BlackjackBot) DecideAction(g *BlackjackGameState) string {
	p := g.current()
	total := handTotal(p.Hand)

	if len(p.Hand) == 2 && total == 11 && p.Balance >= p.Bet {
		return "double"
	}
	if total < 17 {
		return "hit"
	}
	return "stand"
}

// PlayFullTurn исполняет одно решение бота — используется при
// автоматической прокрутке партии.
func (b BlackjackBot) PlayFullTurn(g *BlackjackGameState) error {
	if g.Phase != BJPhasePlayerTurn {
		return nil
	}
	switch b.DecideAction(g) {
	case "double":
		return g.DoubleDown()
	case "hit":
		return g.Hit()
	default:
		return g.Stand()
	}
}
