import { GameState, CardColor, Player, Card, GameOptions, BeloteEvents, AllowedPlayerKeys } from './types';
import { EventEmitter } from 'events';
export declare class Belote extends EventEmitter {
    private timeoutId;
    readonly options: GameOptions;
    readonly gameState: GameState;
    constructor(init?: Partial<GameOptions>);
    private createPlayer;
    playerJoin(playerName?: string, options?: Partial<Pick<Player, AllowedPlayerKeys>>): Player;
    playerLeave(playerId: string): void;
    addBot(botName?: string, options?: Partial<Pick<Player, AllowedPlayerKeys>>): Player;
    removeBot(botId: string): void;
    updatePlayer(playerId: string, updates: Partial<Player> | ((player: Player) => Partial<Player>)): void;
    switchPlayerTeam(playerId: string, newTeamId: number): void;
    setPlayerReady(playerId: string, isReady: boolean): void;
    private clearTimer;
    private startTimer;
    private safeBotAction;
    startGame(): void;
    startNextRound(): void;
    private dealInitialCards;
    getCurrentPlayer(): Player;
    private startBidding;
    bid(playerId: string, call: CardColor | 'pass'): void;
    private advanceBidding;
    private dealTalon;
    private startCallingPhase;
    makeCall(playerId: string, cards: Card[]): void;
    private resolveCalls;
    private startPlayingPhase;
    playCard(playerId: string, card: Card): void;
    private completeTrick;
    private determineTrickWinner;
    private completeRound;
    private calculateRoundScores;
    private getLastTrickOverall;
    private areTricksEqual;
    getPlayerById(playerId: string): Player | null;
    getPlayersByTeam(teamId: number): Player[];
    destroy(): void;
}
export interface Belote {
    on<K extends keyof BeloteEvents>(event: K, listener: BeloteEvents[K]): this;
    emit<K extends keyof BeloteEvents>(event: K, ...args: Parameters<BeloteEvents[K]>): boolean;
    off<K extends keyof BeloteEvents>(event: K, listener: BeloteEvents[K]): this;
    removeAllListeners<K extends keyof BeloteEvents>(event?: K): this;
    addListener<K extends keyof BeloteEvents>(event: K, listener: BeloteEvents[K]): this;
    once<K extends keyof BeloteEvents>(event: K, listener: BeloteEvents[K]): this;
}
