import { Question, ViewComponent } from '@vue-skuilder/common-ui';
import { DataShape, ViewData } from '@vue-skuilder/common';
import { Piece as cjsPiece } from 'chess.js';
import { Key } from '../../chessground/types';
export interface ForkPosition {
    fen: string;
    solutions: Key[];
    pieceType: cjsPiece;
    value: number;
}
export declare class ForkFinder extends Question {
    static dataShapes: DataShape[];
    static views: import('vue').DefineComponent<{
        data: ViewData[];
        modifyDifficulty?: number;
    }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
        [x: string]: never;
    }, string, import('vue').PublicProps, Readonly<{
        data: ViewData[];
        modifyDifficulty?: number;
    }> & Readonly<{
        [x: `on${Capitalize<string>}`]: ((...args: unknown[]) => any) | undefined;
    }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
        chessboard: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{
            position: import('../../components/types').ChessPosition;
            config?: import('../../chessground/config').Config;
            showCoordinates?: boolean;
            animations?: import('../../components/ChessBoard.vue').AnimationMove[];
        }> & Readonly<{
            onMove?: ((move: import('../../components/types').Move) => any) | undefined;
            "onPosition-change"?: ((position: import('../../components/types').ChessPosition) => any) | undefined;
        }>, {
            playAnimations: (moves: import('../../components/ChessBoard.vue').AnimationMove[]) => Promise<void> | void;
            showMoves: (sm: import('../../components/ChessBoard.vue').ShowMoves) => Promise<void> | void;
            updateConfig: (config: import('../../chessground/config').Config) => void;
        }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
            move: (move: import('../../components/types').Move) => any;
            "position-change": (position: import('../../components/types').ChessPosition) => any;
        }, import('vue').PublicProps, {}, false, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
            boardElement: HTMLDivElement;
        }, HTMLDivElement, import('vue').ComponentProvideOptions, {
            P: {};
            B: {};
            D: {};
            C: {};
            M: {};
            Defaults: {};
        }, Readonly<{
            position: import('../../components/types').ChessPosition;
            config?: import('../../chessground/config').Config;
            showCoordinates?: boolean;
            animations?: import('../../components/ChessBoard.vue').AnimationMove[];
        }> & Readonly<{
            onMove?: ((move: import('../../components/types').Move) => any) | undefined;
            "onPosition-change"?: ((position: import('../../components/types').ChessPosition) => any) | undefined;
        }>, {
            playAnimations: (moves: import('../../components/ChessBoard.vue').AnimationMove[]) => Promise<void> | void;
            showMoves: (sm: import('../../components/ChessBoard.vue').ShowMoves) => Promise<void> | void;
            updateConfig: (config: import('../../chessground/config').Config) => void;
        }, {}, {}, {}, {}> | null;
    }, HTMLDivElement>[];
    static acceptsUserData: boolean;
    private positions;
    private currentPositionIndex;
    private pieceType;
    private playerColor;
    dataShapes(): DataShape[];
    playerPiece(): cjsPiece;
    views(): ViewComponent[];
    constructor(data: ViewData[]);
    private generatePositions;
    private placeEnemyPieces;
    /**
     *
     * @param chess The board with enemy pieces placed
     * @returns a list of safe squares to place the attacking piece to fork the enemy pieces
     */
    private findSolutions;
    private chooseRandomEnemyPiece;
    private chooseAttackerPosition;
    getCurrentPosition(): ForkPosition;
    private shuffleArray;
    protected isCorrect(answer: string[]): boolean;
    protected displayedSkill(answer: string[], timeSpent: number): number;
}
//# sourceMappingURL=index.d.ts.map