/**
 * Copyright (c) 2021 Dominic Masters
 * 
 * This software is released under the MIT License.
 * https://opensource.org/licenses/MIT
 */

#pragma once
#include "fuck.h"
#include "poker.h"
#include "card.h"

/**
 * Set a next dealer. This will also select the new small and big blind players.
 * This will automatically skip out players if you provide one.
 * 
 * @param poker Poker game to select a new dealer for.
 * @param dealer Dealer to become the new dealer.
 */
void pokerDealerSet(poker_t *poker, uint8_t dealer);

/**
 * Cycles to the next dealer. This will also select the new small and big blind
 * players.
 * 
 * @param poker Poker game to select a new dealer for.
 */
void pokerDealerNew(poker_t *poker);

/**
 * Turns over cards from the deck onto the table (from the deck into the dealer
 * hand)
 * 
 * @param poker Poker game instance.
 * @param count Count of cards to deal.
 */
void pokerDealerTurn(poker_t *poker, uint8_t count);

/**
 * Burns a set of cards off the top of the deck into the graveyard.
 * 
 * @param poker Poker game instance.
 * @param count Count of cards to burn.
 */
void pokerDealerBurn(poker_t *poker, uint8_t count);

/**
 * Deal a card to a player.
 * 
 * @param poker Poker game instance.
 * @param player Poker player to deal to.
 * @param count Count of cards to deal to the player.
 */
void pokerDeal(poker_t *poker, pokerplayer_t *player, uint8_t count);

/**
 * Deal card(s) to every active player.
 * 
 * @param poker Poker game instance.
 * @param count Count of cards to deal.
 */
void pokerDealAllPlayers(poker_t *poker, uint8_t count);
