package main

// NewDurakDeck создаёт колоду для Дурака: 36 карт (от шестёрки до
// туза), без карт от двойки до пятёрки. Использует те же типы
// Suit/Rank/Card, что и остальные игры коллекции.
func NewDurakDeck() *Deck {
	ranks := []Rank{Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace}
	d := &Deck{cards: make([]Card, 0, 36)}
	for s := Clubs; s <= Spades; s++ {
		for _, r := range ranks {
			d.cards = append(d.cards, Card{Suit: s, Rank: r})
		}
	}
	return d
}

// durakRankOrder — старшинство рангов в Дураке: шестёрка младше
// всех, туз — старше всех. В отличие от Rank.Value() (очковая
// стоимость карты в Тонке), здесь важен только порядок.
var durakRankOrder = map[Rank]int{
	Six: 0, Seven: 1, Eight: 2, Nine: 3, Ten: 4,
	Jack: 5, Queen: 6, King: 7, Ace: 8,
}

// durakBeats проверяет, бьёт ли карта defend карту attack при
// козыре trump: старше по рангу той же масти, либо любой козырь
// против некозырной карты. Козырь козырем бьётся только старшим
// козырем — простая, но не менее важная деталь.
func durakBeats(defend, attack Card, trump Suit) bool {
	if defend.Suit == attack.Suit {
		return durakRankOrder[defend.Rank] > durakRankOrder[attack.Rank]
	}
	return defend.Suit == trump && attack.Suit != trump
}
