import type { AnyExpression, Connection, PipelineStage } from 'mongoose';
import * as factory from '../../factory';
type IMatchStage = PipelineStage.Match;
/**
 * 座席編集時レスポンス
 */
interface IUpdateSeatResult {
    containedInPlace: {
        /**
         * 施設ID
         */
        id: string;
    };
    typeOf: factory.placeType.ScreeningRoom;
}
export declare const DEFAULT_ROOM_MAXIMUM_CAPACITY: number;
/**
 * 座席リポジトリ
 */
export declare class SeatRepo {
    private readonly civicStructureModel;
    private readonly placeModel;
    constructor(connection: Connection);
    static CREATE_SEARCH_SEATS_PROJECTION(params: factory.place.seat.IProjection): {
        [field: string]: AnyExpression;
    };
    static CREATE_MATCH_STAGES(params: factory.place.seat.ISearchConditions, options: {
        filterTypeOf: boolean;
    }): IMatchStage[];
    createSeat(seat: factory.place.seat.IPlace & {
        parentOrganization?: {
            id?: string;
        };
    }): Promise<IUpdateSeatResult>;
    updateSeat(seat: Omit<factory.place.seat.IPlace, 'containedInPlace'> & {
        containedInPlace: {
            branchCode: string;
            containedInPlace: {
                branchCode: string;
                containedInPlace: {
                    branchCode: string;
                };
            };
        };
        parentOrganization?: {
            id?: string;
        };
    }, $unset: any): Promise<IUpdateSeatResult>;
    searchSeats(params: factory.place.seat.ISearchConditions): Promise<factory.place.seat.IPlace[]>;
    projectSeatsByScreeningRoom(params: Pick<factory.place.seat.ISearchConditions, '$projection' | 'additionalProperty' | 'branchCode' | 'seatingType' | 'name' | 'limit' | 'page'> & {
        project: {
            id: {
                $eq: string;
            };
        };
        screeningRoom: {
            /**
             * ルームコード
             */
            branchCode: {
                $eq: string;
            };
            containedInPlace: {
                /**
                 * 施設コード
                 */
                branchCode: {
                    $eq: string;
                };
            };
        };
        containedInPlace?: {
            /**
             * セクションコード
             */
            branchCode?: {
                $eq?: string;
                $in?: string[];
            };
        };
    }): Promise<factory.place.seat.IPlace[]>;
    /**
     * 座席区分集計検索
     */
    aggregateSeatingTypes(params: {
        project: {
            id: {
                $eq: string;
            };
        };
        /**
         * 座席コード
         */
        branchCode?: {
            $in?: string[];
        };
        containedInPlace?: {
            /**
             * セクションコード
             */
            branchCode?: {
                $in?: string[];
            };
            containedInPlace?: {
                branchCode?: {
                    $eq?: string;
                };
                containedInPlace?: {
                    branchCode?: {
                        $eq?: string;
                    };
                };
            };
        };
    }): Promise<string[]>;
    deleteSeat(seat: {
        project: {
            id: string;
        };
        parentOrganization?: {
            id?: string;
        };
        /**
         * 座席コード
         */
        branchCode: string;
        containedInPlace: {
            /**
             * セクションコード
             */
            branchCode: string;
            containedInPlace: {
                /**
                 * ルームコード
                 */
                branchCode: string;
                containedInPlace: {
                    /**
                     * 施設コード
                     */
                    branchCode: string;
                };
            };
        };
    }): Promise<IUpdateSeatResult>;
}
export {};
