import { Item, Recipe } from "./../shoppingCart/ShoppingCartCore";
import { Action, ActionTaken } from "./Action";
import { Buffs } from "../buffs/Buffs";
export interface OptimalActions {
    [key: string]: {
        [ActionTaken.Buy]: Action | null;
        [ActionTaken.Craft]: Action | null;
    };
}
export interface OptimizerInterface {
    startCalculatingOptimalActions(itemName: string, startingRecipeId: string): OptimalActions;
    calculateOptimalActions(itemName: string, recipeRestriction: string, optimalActions: OptimalActions | null): OptimalActions;
    findOptimalActionSets(): {
        [key: string]: {
            recipe: Recipe;
            optimalActions: OptimalActions;
        };
    };
}
export declare abstract class Optimizer implements OptimizerInterface {
    items: {
        [key: string]: Item;
    };
    rootItemName: string;
    optimalActions: OptimalActions;
    buffs: Buffs;
    /**
     *
     */
    constructor();
    /**
     *
     * @param items
     * @param rootItemName
     */
    setItems(items: {
        [key: string]: Item;
    }, rootItemName: string): void;
    calculateOptimalActions(itemName: string, recipeRestriction: string, optimalActions: OptimalActions | null): OptimalActions;
    startCalculatingOptimalActions(itemName: string, startingRecipeId: string): OptimalActions;
    findOptimalActionSets(): {
        [key: string]: {
            recipe: Recipe;
            optimalActions: OptimalActions;
        };
    };
    resetOptimalActions(): void;
    sequenceGenerator(n: number, arr: Array<string>, i: number): any;
    printOptimalActions(): void;
}
//# sourceMappingURL=OptimizerInterface.d.ts.map