import React from 'react';
import { CellInfo, CellLocation as CellLocation$1 } from '@gobstones/gobstones-gbb-parser';

declare type AttireContent = {
    image: string;
    text: string;
};

declare class Board {
    cells: CellInfo[][];
    constructor(columnsQuantity: number, rowsQuantity: number, boardInfo: CellInfo[][] | undefined);
    getCell([x, y]: CellLocation$1): CellInfo;
    getColumnsQuantity(): number;
    getRowsQuantity(): number;
    addColumn(): Board;
    removeColumn(): Board;
    addRow(): Board;
    removeRow(): Board;
    setColumnsQuantity(n: number): Board;
    addColumns(x: number): Board;
    private removeColumns;
    setRowsQuantity(x: number): Board;
    private addRows;
    private removeRows;
    removeNBlueAt(_c: CellLocation$1, _n: number): Board;
    removeNBlackAt(_c: CellLocation$1, _n: number): Board;
    removeNRedAt(_c: CellLocation$1, _n: number): Board;
    removeNGreenAt(_c: CellLocation$1, _n: number): Board;
    addNBlueAtOn(_c: CellLocation$1, _n: Number): Board;
    addNBlackAtOn(_c: CellLocation$1, _n: Number): Board;
    addNGreenAtOn(_c: CellLocation$1, _n: Number): Board;
    addNRedAtOn(_c: CellLocation$1, _n: Number): Board;
    static initializeMatrix(columnsQuantity: number, rowsQuantity: number): CellInfo[][];
    getCellInfo(): CellInfo[][];
}

declare type ThemeStringType = "classic" | "deuteranope" | "protanope" | "tritanope" | "flat" | "high-contrast" | "lines" | "modern" | "shapes";
declare abstract class AbstractTheme {
    abstract changeCSSVariables(): void;
    abstract canHandleName(name: string): boolean;
    setHeaderToDaltonism(): void;
    setAmountColorTo(color: string): void;
    setStonesColorTo(theme: string): void;
    setCellBackgroundColor(color: string): void;
    setHeaderColors(headerBackground: string, headerOutline: string): void;
    setBorderColors(borderBackground: string, borderNumbersColor: string): void;
    setDefaultHeader(): void;
}
declare class ClassicTheme extends AbstractTheme {
    canHandleName(name: string): boolean;
    changeCSSVariables(): void;
}

declare type LanguageStringType = "en" | "es";

declare type AttireJSON = {
    enabled: boolean;
    rules: Rule[];
    borders: Borders;
};
declare type CellWhenAttire = {
    red: number | string;
    green: number | string;
    black: number | string;
    blue: number | string;
};
declare type Rule = {
    when: CellWhenAttire;
    image: string;
    text?: string;
};
declare type Borders = {
    bottom: string;
    bottomLeft: string;
    bottomRight: string;
    left: string;
    right: string;
    top: string;
    topLeft: string;
    topRight: string;
};
declare class Attire {
    attire: AttireJSON;
    constructor(att?: AttireJSON);
    getAttireJSON(): AttireJSON;
    getAttireFor(black: number, blue: number, green: number, red: number): {
        image: string;
        text: string;
    };
    getwhen(black: number, blue: number, green: number, red: number): {
        image: string;
        text: string;
    };
    ruleMatchWith(rule: Rule, black: number, blue: number, green: number, red: number): boolean;
    match(when: number | string, amount: number): boolean;
    matchRegex(when: string, amount: number): boolean;
    getTopLeftCorner(): string;
    getTopRightCorner(): string;
    getBottomRightCorner(): string;
    getBottomLeftCorner(): string;
    getBottomBorder(): string;
    getTopBorder(): string;
    getLeftBorder(): string;
    getRightBorder(): string;
}

declare type BoardState = {
    header: CellLocation;
    cells: Board;
    attire: Attire;
    theme: AbstractTheme;
};
declare type CellLocation = [number, number];
declare type BoardProps = {
    columnsQuantity: number;
    rowsQuantity: number;
    header: CellLocation;
    editable: boolean;
    boardInfo?: CellInfo[][];
    attire: AttireJSON;
    theme: ThemeStringType;
    language: LanguageStringType;
};
declare class BoardComponent extends React.Component<BoardProps, BoardState> {
    constructor(props: BoardProps);
    static defaultProps: {
        columnsQuantity: number;
        rowsQuantity: number;
        header: {
            x: number;
            y: number;
        };
        editable: boolean;
        attire: AttireJSON;
        theme: ClassicTheme;
        language: string;
    };
    componentDidMount(): void;
    componentWillUnmount(): void;
    render(): React.ReactElement;
    handleRightArrowClickRight(): void;
    handleRightArrowClickLeft(): void;
    handleTopArrowClickUp(): void;
    handleTopArrowClickDown(): void;
    handleChangeXSize(n: number): void;
    handleChangeYSize(n: number): void;
    resetHeader(): void;
    renderRightArrows(): JSX.Element;
    renderTopArrows(): JSX.Element;
    private mapColumnsBorder;
    private mapRaws;
    private mapColumnsContent;
    private handleAddBlue;
    private handleAddGreen;
    private handleAddBlack;
    getAttireFor(x: number, y: number): AttireContent;
    private handleAddRed;
    isHeader(x: number, y: number): boolean;
    handleKeyPressed(e: KeyboardEvent): void;
    private handleFileChange;
    private parseBoardFile;
    private handleRemoveBlue;
    private handleRemoveBlack;
    private handleRemoveGreen;
    private handleRemoveRed;
    private handleExportGBB;
    private handleThemeChange;
}

export { BoardComponent };
