import { BidOptimizer } from '../../api/core/bidoptimizer/BidOptimizerInterface';
import { PluginProperty } from '../../api/core/plugin/PluginPropertyInterface';
import { BidDecision } from '../../api/plugin/bidoptimizer/BidDecision';
import { BidOptimizerRequest, SaleCondition } from '../../api/plugin/bidoptimizer/BidOptimizerRequestInterface';
import { BasePlugin, PropertiesWrapper } from '../common';
export type BidOptimizerPluginResponse = BidDecision;
export interface BidOptimizerBaseInstanceContext {
    properties: PropertiesWrapper;
    bidOptimizer: BidOptimizer;
}
export declare abstract class BidOptimizerPlugin extends BasePlugin<BidOptimizerBaseInstanceContext> {
    instanceContext: Promise<BidOptimizerBaseInstanceContext>;
    constructor(enableThrottling?: boolean);
    /**
     *
     * @param bidOptimizerId
     */
    fetchBidOptimizer(bidOptimizerId: string): Promise<BidOptimizer>;
    /**
     *
     * @param bidOptimizerId
     */
    fetchBidOptimizerProperties(bidOptimizerId: string): Promise<PluginProperty[]>;
    findBestSalesConditions(bidPrice: number, salesConditions: SaleCondition[]): SaleCondition;
    /**
     * Method to build an instance context
     * To be overriden to get a cutom behavior
     * This is a default provided implementation
     * @param bidOptimizerId
     */
    protected instanceContextBuilder(bidOptimizerId: string): Promise<BidOptimizerBaseInstanceContext>;
    /**
     *
     * @param request
     * @param instanceContext
     */
    protected abstract onBidDecisions(request: BidOptimizerRequest, instanceContext: BidOptimizerBaseInstanceContext): Promise<BidOptimizerPluginResponse>;
    protected getInstanceContext(bidOptimizerId: string): Promise<BidOptimizerBaseInstanceContext>;
    private initBidDecisions;
}
