import { ChessColor } from './../enums/enums';
import { QueryList } from '@angular/core';
import { ChessPawnComponent } from '../components/chess-pawn/chess-pawn.component';
import { ChessEnum } from '../enums/enums';
import { Address } from './address';
import { AbstractPiece } from './piece';
export interface AddressPiece {
    address: string | undefined;
    piece: ChessEnum;
    chessPieces: QueryList<ChessPawnComponent>;
}
export declare abstract class ChessAbstractModel {
    stopSetOnDrop: boolean;
    display: {
        add: boolean;
    };
    /**
     * Triggered on dragged
     * @param dragged describe dragged field
     */
    abstract onDragged(dragged: AddressPiece): void;
    /**
     * Triggered on drop
     * @param dropped Describe dropped field
     * @returns true when dropped is done, false when dropped fail
     */
    abstract onDropped(dropped: AddressPiece): boolean;
}
export declare class ChessDragAndDropModel extends ChessAbstractModel {
    onDragged(dragged: AddressPiece): void;
    onDropped(dropped: AddressPiece): boolean;
}
export declare class ChessPieceMoveModel extends ChessAbstractModel {
    protected draggedPiece: AbstractPiece | undefined;
    constructor();
    onDragged(dragged: AddressPiece): void;
    onDropped(dropped: AddressPiece): boolean;
    protected pawnPromote(type: ChessEnum, address: Address): ChessEnum;
}
export declare class PlayChessModel extends ChessPieceMoveModel {
    protected moveTurn: ChessColor;
    onDragged(dragged: AddressPiece): void;
    onDropped(dropped: AddressPiece): boolean;
}
