import { AnyExpression, Connection } from 'mongoose';
import * as factory from '../../factory';
import { IOfferInCatalog, IPriceSpecificationConditionsOnSearchWithSortIndex, IProjection, OfferInCatalogReadOnlyRepo } from './offerInCatalogReadOnly';
export { IPriceSpecificationConditionsOnSearchWithSortIndex, IOfferInCatalog as IUnitPriceOfferFromAggregateOffer };
/**
 * 単価オファー読取リポジトリ
 */
export declare class OfferRepo implements OfferInCatalogReadOnlyRepo {
    private readonly aggregateOfferModel;
    private readonly offerCatalogModel;
    private readonly offerCatalogItemModel;
    constructor(connection: Connection);
    static CREATE_AGGREGATE_OFFERS_PROJECTION(params: IProjection): {
        [field: string]: AnyExpression;
    };
    /**
     * カタログIDで単価オファーを全て検索する
     * 必ずカタログデータから単価オファーIDを参照する
     */
    searchAllByOfferCatalogId(params: {
        subOfferCatalog: {
            /**
             * サブカタログID
             */
            id: string;
            isOfferCatalogItem: boolean;
        };
        projection?: IProjection;
    }): Promise<{
        offers: IOfferInCatalog[];
    }>;
    /**
     * 単価オファーIDとカタログIDで単価オファーを全て検索する
     * 単価オファーIDを一定数指定する想定なのでpagingは不要
     */
    searchAllByIdsAndOfferCatalogId(params: {
        /**
         * 指定したIDの単価オファーだけ取得
         */
        ids: string[];
        includedInDataCatalog: {
            /**
             * オファー記載のカタログID(複数対応)
             */
            id: string[];
            isOfferCatalogItem: boolean;
        };
        availableAtOrFrom?: {
            id?: string;
        };
        unacceptedPaymentMethod?: string[];
        excludeAppliesToMovieTicket: boolean;
        onlyValid?: boolean;
        projection?: IProjection;
    }): Promise<IOfferInCatalog[]>;
    /**
     * カタログに含まれるオファーを検索する(カタログ内ソートは保証しない)
     * カタログ内ソートインデックスはsortedOfferIdsで判断する
     */
    searchByOfferCatalogIdWithSortIndex(params: {
        offerCatalog: {
            /**
             * サブカタログID
             */
            id: string;
            isOfferCatalogItem: boolean;
        };
        availableAtOrFrom?: {
            id?: string;
        };
        unacceptedPaymentMethod?: string[];
        excludeAppliesToMovieTicket: boolean;
        /**
         * 適用決済カード条件
         */
        priceSpecification: IPriceSpecificationConditionsOnSearchWithSortIndex;
        onlyValid?: boolean;
        useIncludeInDataCatalog: boolean;
        limit?: number;
        page?: number;
        projection?: IProjection;
    }): Promise<{
        offers: IOfferInCatalog[];
        /**
         * カタログ内ソートされた集計オファーIDリスト
         */
        sortedOfferIds: string[];
    }>;
    /**
     * カタログに記載されたオファーにおいて利用可能な決済方法区分を検索する
     */
    searchAvaialbleAppliesToMovieTicketByOfferCatalogId(params: {
        subOfferCatalog: {
            /**
             * カタログID or サブカタログID
             */
            id: string;
            isOfferCatalogItem: boolean;
        };
        availableAtOrFrom?: {
            id?: string;
        };
        unacceptedPaymentMethod?: string[];
        excludeAppliesToMovieTicket: boolean;
        onlyValid?: boolean;
        limit?: number;
        page?: number;
        useIncludeInDataCatalog: boolean;
    }): Promise<Pick<factory.priceSpecification.unitPrice.IAppliesToMovieTicket, 'serviceOutput'>[]>;
    /**
     * クライアントの利用可能カタログを検索する
     */
    searchAvailableCatalogs(params: {
        project: {
            id: string;
        };
        includedInDataCatalog: {
            id: string[];
        };
        availableAtOrFrom: {
            id: string;
        };
        unacceptedPaymentMethod: string[];
    }): Promise<{
        id: string;
    }[]>;
    /**
     * サブカタログがクライアントで利用可能かどうか
     */
    isCatalogAvailable(params: {
        includedInDataCatalog: {
            /**
             * サブカタログID
             */
            id: string;
        };
        availableAtOrFrom: {
            id: string;
        };
        unacceptedPaymentMethod: string[];
    }): Promise<boolean>;
    count(params: Omit<factory.unitPriceOffer.ISearchConditions, 'limit' | 'page' | 'sort'>): Promise<number>;
    search(params: factory.unitPriceOffer.ISearchConditions, projection?: IProjection): Promise<IOfferInCatalog[]>;
    /**
     * サブカタログから集計オファーIDリストを検索する
     */
    private searchAggregateOfferIdsBySubOfferCatalog;
    /**
     * 複数サブカタログから集計オファーIDリストを検索する
     */
    private searchAggregateOfferIdsBySubOfferCatalogs;
}
