import { CubeState } from '../CubeState';
import { EOGStatus } from '../EOGStatus';
import { SGResult } from '../records/SGResult';
import { Score } from '../Score';
import { StakeConf } from '../StakeConf';
/**
 * バックギャモンの局面を示す状態を、キューブのみに限定した定義
 */
export declare type CBState = CBOpening | CBInPlay | CBAction | CBResponse | CBToRoll | CBEoG;
export declare type CBOpening = _CBState & {
    tag: 'CBOpening';
    doStartCheckerPlayRed: () => CBInPlayRed;
    doStartCheckerPlayWhite: () => CBInPlayWhite;
};
export declare type CBAction = CBActionRed | CBActionWhite;
export declare type CBResponse = CBResponseRed | CBResponseWhite;
export declare type CBToRoll = CBToRollRed | CBToRollWhite;
export declare type CBInPlay = CBInPlayRed | CBInPlayWhite;
export declare type CBEoG = CBEoGRedWon | CBEoGWhiteWon | CBEoGNogame;
declare type _CBState = {
    cubeState: CubeState;
};
declare type _CBAction = _CBState & {
    tag: 'CBAction';
};
export declare type CBActionRed = _CBAction & {
    isRed: true;
    doDouble: () => CBResponseWhite;
    doStartCheckerPlay: () => CBInPlayRed;
    doSkipCubeAction: () => CBToRollRed;
};
export declare type CBActionWhite = _CBAction & {
    isRed: false;
    doDouble: () => CBResponseRed;
    doStartCheckerPlay: () => CBInPlayWhite;
    doSkipCubeAction: () => CBToRollWhite;
};
declare type _CBResponse = _CBState & {
    tag: 'CBResponse';
    isRed: boolean;
};
export declare type CBResponseRed = _CBResponse & {
    doTake: () => CBToRollWhite;
    doPass: () => CBEoGWhiteWon;
    isDoubleFromRed: false;
    isRed: true;
};
export declare type CBResponseWhite = _CBResponse & {
    doTake: () => CBToRollRed;
    doPass: () => CBEoGRedWon;
    isDoubleFromRed: true;
    isRed: false;
};
declare type LastCubeAction = 'Take' | 'Skip';
declare type _CBToRoll = _CBState & {
    tag: 'CBToRoll';
    lastAction: LastCubeAction;
};
export declare type CBToRollRed = _CBToRoll & {
    isRed: true;
    doStartCheckerPlay: () => CBInPlayRed;
};
export declare type CBToRollWhite = _CBToRoll & {
    isRed: false;
    doStartCheckerPlay: () => CBInPlayWhite;
};
declare type _CBInPlay = _CBState & {
    tag: 'CBInPlay';
    mayDouble: boolean;
};
export declare type CBInPlayRed = _CBInPlay & {
    isRed: true;
    doStartCubeAction: (skipCubeAction: boolean) => CBActionWhite | CBToRollWhite;
};
export declare type CBInPlayWhite = _CBInPlay & {
    isRed: false;
    doStartCubeAction: (skipCubeAction: boolean) => CBActionRed | CBToRollRed;
};
declare type _CBEoG = _CBState & {
    tag: 'CBEoG';
    eogStatus: EOGStatus;
    isWonByPass: boolean;
    calcStake: (conf?: StakeConf) => {
        stake: Score;
        eogStatus: EOGStatus;
        jacobyApplied: boolean;
    };
};
export declare type CBEoGRedWon = _CBEoG & {
    result: SGResult.REDWON;
};
export declare type CBEoGWhiteWon = _CBEoG & {
    result: SGResult.WHITEWON;
};
export declare type CBEoGNogame = _CBEoG & {
    isWonByPass: false;
    result: SGResult.NOGAME;
};
export declare function cbOpening(cubeState: CubeState): CBOpening;
export declare function cbActionRed(cubeState: CubeState): CBActionRed;
export declare function cbActionWhite(cubeState: CubeState): CBActionWhite;
export declare function cbInPlayRed(cubeState: CubeState): CBInPlayRed;
export declare function cbInPlayWhite(cubeState: CubeState): CBInPlayWhite;
export declare function cbResponseRed(cubeState: CubeState): CBResponseRed;
export declare function cbResponseWhite(cubeState: CubeState): CBResponseWhite;
export declare function cbToRollRed(cubeState: CubeState, lastAction: LastCubeAction): CBToRollRed;
export declare function cbToRollWhite(cubeState: CubeState, lastAction: LastCubeAction): CBToRollWhite;
export declare function resultToCBEoG(cubeState: CubeState, sgResult: SGResult, eogStatus: EOGStatus): CBEoG;
export {};
//# sourceMappingURL=CubeGameState.d.ts.map