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

/**
 * 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 };
