import Prompts from '../../prompts';
import AbstractDataset from '../dataset/abstract';
import AbstractMenu from '../menu/abstract';
import { choiceValueType, levelOptionsType } from '../../types';
export default abstract class AbstractLevel<T extends AbstractDataset<P>, S extends AbstractDataset<any>, M extends AbstractMenu<T, S>, P = undefined> {
    protected dataset: T;
    protected menu: M;
    protected options: levelOptionsType;
    protected abstract promptCreate: (prompts: Prompts, dataset: T) => Promise<S>;
    protected abstract promptEdit: (prompts: Prompts, parent: P, dataset: T) => Promise<T>;
    protected prompts: Prompts;
    constructor(dataset: T, menu: M, options: levelOptionsType);
    showMenu(): Promise<choiceValueType<S>>;
    create(action: choiceValueType<S>['action']): Promise<S | undefined>;
    edit(dataset: T): Promise<boolean>;
    remove(dataset: T): Promise<boolean>;
    show(dataset: S): Promise<void>;
    exec(): Promise<void>;
    run(): Promise<boolean>;
}
