import { Simulation } from '../../simulation/simulation';
import { ActionType } from './action-type';
import { CraftingJob } from '../crafting-job.enum';
import { SimulationFailCause } from '../simulation-fail-cause.enum';
import { Class } from '@kaiu/serializer';
/**
 * This is the parent class of all actions in the simulator.
 */
export declare abstract class CraftingAction {
    /**
     * checks if the action can be moved inside the simulation state,
     * this is meant to prevent moving automatic actions (looking at you Whistle end progression tick).
     * @returns {boolean}
     */
    canBeMoved(currentIndex: number): boolean;
    getId(jobId: number): number;
    getWaitDuration(): number;
    /**
     * If an action is skipped on fail, it doesn't tick buffs.
     * Example: Observe, Master's Mend, buffs.
     */
    skipOnFail(): boolean;
    requiresGood(): boolean;
    hasCombo(simulation: Simulation): boolean;
    abstract getLevelRequirement(): {
        job: CraftingJob;
        level: number;
    };
    abstract getType(): ActionType;
    abstract getIds(): number[];
    abstract _getSuccessRate(simulationState: Simulation): number;
    getSuccessRate(simulationState: Simulation): number;
    canBeUsed(simulationState: Simulation, linear?: boolean, safeMode?: boolean): boolean;
    getFailCause(simulationState: Simulation, linear?: boolean, safeMode?: boolean): SimulationFailCause | undefined;
    abstract _canBeUsed(simulationState: Simulation, linear?: boolean): boolean;
    getCPCost(simulationState: Simulation, linear?: boolean): number;
    abstract getBaseCPCost(simulationState: Simulation): number;
    abstract getDurabilityCost(simulationState: Simulation): number;
    abstract execute(simulation: Simulation, safe?: boolean): void;
    onFail(simulation: Simulation): void;
    skipsBuffTicks(): boolean;
    /**
     * Checks if this action is an instance of a given other action.
     * @param actionClass
     */
    is<T extends CraftingAction>(actionClass: Class<T>): actionClass is Class<T>;
    getBaseProgression(simulation: Simulation): number;
    getBaseQuality(simulation: Simulation): number;
}
