import { ChoiceMenuOptionsType } from '../types/ChoiceMenuOptionsType.js';
import { StorageElementType } from '../types/StorageElementType.js';
import { InputInfo } from '../types/InputInfo.js';
import { StepLabelPropsType, StepLabelResultType, StepLabelType } from '../types/StepLabelType.js';
import ChoiceMenuOption, { ChoiceMenuOptionClose } from '../classes/ChoiceMenuOption.js';
import Dialogue from '../classes/Dialogue.js';
import Label from '../classes/Label.js';
import LabelAbstract from '../classes/LabelAbstract.js';
import CharacterInterface from '../interface/CharacterInterface.js';
import ExportedStep from '../interface/export/ExportedStep.js';
import HistoryStep, { HistoryStepData } from '../interface/HistoryStep.js';
import NarrationManagerInterface from '../interface/managers/NarrationManagerInterface.js';
import NarrativeHistory from '../interface/NarrativeHistory.js';
import OpenedLabel from '../interface/OpenedLabel.js';
import { LabelIdType } from '../types/LabelIdType.js';
import '@drincs/pixi-vn';
import '../interface/LabelProps.js';
import '../types/CloseType.js';
import '../types/LabelRunModeType.js';
import 'deep-diff';
import 'microdiff';
import '../interface/export/ExportedCanvas.js';
import '../types/PauseTickerType.js';
import '../interface/canvas/memory/CanvasBaseItemMemory.js';
import '../interface/canvas/memory/ContainerMemory.js';
import 'pixi.js';
import '../types/ContainerChild.js';
import '../classes/canvas/CanvasBaseItem.js';
import '../interface/TickerHistory.js';
import '../types/TickerIdType.js';
import '../interface/TickerArgs.js';
import '../interface/TickersSequence.js';
import '../types/PauseType.js';
import '../types/RepeatType.js';
import '../interface/export/ExportedSounds.js';
import '../interface/SoundOptions.js';
import '@pixi/sound';
import '../types/SoundFilterMemory.js';
import '../interface/export/ExportedStorage.js';
import '../types/HistoryChoiceMenuOption.js';

/**
 * This class is a class that manages the steps and labels of the game.
 */
declare class NarrationManager implements NarrationManagerInterface {
    private readonly getCurrentStepData;
    private readonly restoreFromHistoryStep;
    private readonly forceCompletionOfTicker;
    constructor(getCurrentStepData: () => HistoryStepData, restoreFromHistoryStep: (restoredStep: HistoryStepData, navigate: (path: string) => void) => Promise<void>, forceCompletionOfTicker: () => void);
    get stepsHistory(): HistoryStep<Dialogue<CharacterInterface>>[];
    get currentStepTimesCounter(): number;
    set currentStepTimesCounter(_: 0);
    getRandomNumber(min: number, max: number, options?: {
        onceOnly?: boolean;
    }): number | undefined;
    get lastStepIndex(): number;
    get openedLabels(): OpenedLabel[];
    get currentLabel(): Label | undefined;
    /**
     * Add a label to the history.
     * @param label The label to add to the history.
     */
    private addStepHistory;
    closeCurrentLabel(): void;
    closeAllLabels(): void;
    get narrativeHistory(): NarrativeHistory[];
    removeNarrativeHistory(itemsNumber?: number): void;
    isLabelAlreadyCompleted<Label extends LabelAbstract<any>>(label: LabelIdType | Label): boolean;
    private get alreadyCurrentStepMadeChoicesObj();
    get alreadyCurrentStepMadeChoices(): number[] | undefined;
    get isCurrentStepAlreadyOpened(): boolean;
    getTimesLabelOpened(label: LabelIdType): number;
    getTimesChoiceMade(index: number): number;
    addCurrentStepToHistory(): void;
    private getCanGoNext;
    get canGoNext(): boolean;
    goNext(props: StepLabelPropsType, options?: {
        choiseMade?: number;
        runNow?: boolean;
    }): Promise<StepLabelResultType>;
    /**
     * Execute the current step and add it to the history.
     * @param props The props to pass to the step.
     * @param options The options.
     * @returns StepLabelResultType or undefined.
     */
    private runCurrentStep;
    callLabel<T extends {} = {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType>;
    jumpLabel<T extends {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType>;
    selectChoice<T extends {}>(item: ChoiceMenuOptionClose | ChoiceMenuOption<T>, props: StepLabelPropsType<T>): Promise<StepLabelResultType>;
    closeChoiceMenu<T extends {} = {}>(choice: ChoiceMenuOptionClose<T>, props: StepLabelPropsType<T>): Promise<StepLabelResultType>;
    /** Old Step Methods */
    get stepLimitSaved(): number;
    set stepLimitSaved(limit: number);
    goBack(navigate: (path: string) => void, steps?: number): Promise<void>;
    get canGoBack(): boolean;
    blockGoBack(): Promise<void>;
    onGameEnd: StepLabelType | undefined;
    onStepError: ((error: any, props: StepLabelPropsType) => void) | undefined;
    get dialogue(): Dialogue | undefined;
    set dialogue(props: {
        character: string | CharacterInterface;
        text: string | string[];
    } | string | string[] | Dialogue | undefined);
    get choiceMenuOptions(): ChoiceMenuOptionsType<any> | undefined;
    set choiceMenuOptions(options: ChoiceMenuOptionsType<any> | undefined);
    get dialogGlue(): boolean;
    set dialogGlue(value: boolean);
    get inputValue(): StorageElementType;
    set inputValue(value: StorageElementType);
    get isRequiredInput(): boolean;
    get inputType(): string | undefined;
    requestInput(info: Omit<InputInfo, "isRequired">, defaultValue?: StorageElementType): void;
    removeInputRequest(): void;
    clear(): void;
    exportJson(): string;
    export(): ExportedStep;
    importJson(dataString: string): Promise<void>;
    import(data: object): Promise<void>;
}

export { NarrationManager as default };
