import { Module, PisellCore, ModuleOptions } from '../../types';
import { BaseModule } from '../BaseModule';
import type { ScheduleItem } from '../Schedule/types';
import type { QuotationItem } from './types';
export type { QuotationItem, QuotationProductData, QuotationSchedule, QuotationState, QuotationCustomer } from './types';
export declare class QuotationModule extends BaseModule implements Module {
    protected defaultName: string;
    protected defaultVersion: string;
    private request;
    private store;
    private scheduleResolver?;
    constructor(name?: string, version?: string);
    initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
    loadQuotations(params?: {
        channel?: string;
        customer_id?: number | string;
    }): Promise<void>;
    getQuotationList(): QuotationItem[];
    /**
     * Look up the quotation price for a specific product (+ optional variant) at a given datetime.
     * Returns the price as a string (e.g. "300.00"), or null if no quotation applies.
     *
     * Priority: iterates quotations already sorted by `sort` ascending (lowest = highest priority).
     * First matching quotation whose schedule covers `datetime` and whose product_data contains
     * the requested productId wins.
     */
    getPriceForProduct(params: {
        productId: number;
        variantId?: number;
        datetime: string;
        customer_id?: number | string;
    }): string | null;
    getQuotationShelfId(params: {
        productId: number;
        variantId?: number;
        datetime: string;
        customer_id?: number | string;
    }): number;
    /**
     * Batch pre-compute quotation prices for a set of products across multiple time points.
     * Key format: `${productId}:${timePoint}`
     * This avoids repeated schedule matching when the same product appears in multiple resource rows.
     */
    buildProductPriceMap(params: {
        productIds: number[];
        timePoints: string[];
        customer_id?: number | string;
    }): Map<string, string | null>;
    setScheduleResolver(resolver: (id: number) => ScheduleItem | undefined): void;
    private filterQuotationsByCustomer;
    private isQuotationVisibleForCustomer;
    private hasValidCustomerId;
    private isQuotationActiveAt;
    private findProductData;
}
