import { CraftingAction } from '../model/actions/crafting-action';
import { ActionResult } from '../model/action-result';
import { CrafterStats } from '../model/crafter-stats';
import { EffectiveBuff } from '../model/effective-buff';
import { Buff } from '../model/buff.enum';
import { SimulationResult } from './simulation-result';
import { SimulationReliabilityReport } from './simulation-reliability-report';
import { Craft } from '../model/craft';
import { StepState } from '../model/step-state';
export declare class Simulation {
    readonly recipe: Craft;
    actions: CraftingAction[];
    private _crafterStats;
    private hqIngredients;
    private stepStates;
    private fails;
    progression: number;
    quality: number;
    startingQuality: number;
    durability: number;
    state: StepState;
    availableCP: number;
    maxCP: number;
    buffs: EffectiveBuff[];
    success: boolean | undefined;
    steps: ActionResult[];
    lastPossibleReclaimStep: number;
    safe: boolean;
    constructor(recipe: Craft, actions: CraftingAction[], _crafterStats: CrafterStats, hqIngredients?: {
        id: number;
        amount: number;
    }[], stepStates?: {
        [index: number]: StepState;
    }, fails?: number[], startingQuality?: number);
    get lastStep(): ActionResult;
    hasComboAvailable(actionId: number): boolean;
    get crafterStats(): CrafterStats;
    readonly possibleConditions: StepState[];
    getReliabilityReport(): SimulationReliabilityReport;
    addInnerQuietStacks(stacks: number): void;
    /**
     *
     * @param thresholds an array of quality thresholds, Collectibility ratings must be scaled before input
     * @returns a boolean for successful calculation, and the minimum value for each stat
     */
    getMinStats(thresholds?: Array<number>): {
        control: number;
        craftsmanship: number;
        cp: number;
        found: boolean;
    };
    reset(): void;
    /**
     * Run the simulation.
     * @param {boolean} linear should everything be linear (aka no fail on actions, Initial preparations never procs)
     * @param maxTurns
     * @param safeMode Safe mode makes all the actions that have success chances < 100
     * @returns {ActionResult[]}
     */
    run(linear?: boolean, maxTurns?: number, safeMode?: boolean): SimulationResult;
    /**
     * Runs an action, can be called from external class (Whistle for instance).
     * @param {CraftingAction} action
     * @param {boolean} linear
     * @param {boolean} safeMode
     * @param index
     */
    runAction(action: CraftingAction, linear?: boolean, safeMode?: boolean, index?: number): ActionResult;
    hasBuff(buff: Buff): boolean;
    getBuff(buff: Buff): EffectiveBuff;
    removeBuff(buff: Buff): void;
    repair(amount: number): void;
    clone(): Simulation;
    private getHQPercent;
    private tickBuffs;
    /**
     * Changes the state of the craft,
     * source: https://github.com/Ermad/ffxiv-craft-opt-web/blob/master/app/js/ffxivcraftmodel.js#L255
     */
    tickState(): void;
}
