import { AXPEntity, AXPMenuProvider, AXPMenuProviderContext, AXPSearchCommandProvider, AXPSearchResult, AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex/platform/common';
import * as i0 from '@angular/core';
import { Injector } from '@angular/core';
import { AXMEntityCrudServiceImpl, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';
import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';
export { AXPResourceAppointmentActionMenuItem, AXPResourceAppointmentBoardFilter, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentItem, AXPResourceAppointmentResource, AXPResourceAppointmentService } from '@acorex/platform/layout/components';

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
        route: string;
    };
    module: {
        route: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        reservationType: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationStatus: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationClass: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservation: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationEvent: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationHold: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationStatusTransition: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationResourceType: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationClassStatus: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reservationClassType: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
    pages: {
        reservationBoard: {
            path: string;
            title: string;
            icon: string;
        };
    };
};

declare function reservationFactory(injector: Injector): Promise<AXPEntity | null>;

declare class AXPReservationManagementReservationEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationEntityModule>;
}

interface AXPReservationManagementReservationEntityModel {
    id: string;
    reservationResourceTypeId: string;
    reservationResourceType?: {
        id: string;
        title: string;
        name: string;
    };
    reservationTypeId: string;
    reservationType?: {
        id: string;
        title: string;
        name: string;
    };
    reservationStatusId: string;
    reservationStatus?: {
        id: string;
        title: string;
        name: string;
    };
    resourceId: string;
    resource?: {
        id: string;
        title?: string;
    };
    startDate: Date;
    endDate: Date;
    requestedById: string;
    requestedBy?: {
        id: string;
        displayName: string;
    };
    requestedDate: Date;
    approvedById: string;
    approvedBy?: {
        id: string;
        displayName: string;
    };
    approvedDate: Date;
}

declare abstract class AXPReservationManagementReservationService extends AXMEntityCrudServiceImpl<string, AXPReservationManagementReservationEntityModel> {
}
declare class AXPReservationManagementReservationServiceImpl extends AXPReservationManagementReservationService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPReservationManagementReservationServiceImpl>;
}

declare function reservationClassFactory(injector: Injector): Promise<AXPEntity | null>;

interface AXPReservationManagementReservationClassEntityModel {
    id: string;
    name: string;
    title: string;
    reservationTypeIds: string[];
    reservationTypes?: {
        id: string;
        title: string;
        name: string;
    }[];
}

declare abstract class AXPReservationManagementReservationClassService extends AXMEntityCrudServiceImpl<string, AXPReservationManagementReservationClassEntityModel> {
}
declare class AXPReservationManagementReservationClassServiceImpl extends AXPReservationManagementReservationClassService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationClassServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPReservationManagementReservationClassServiceImpl>;
}

declare function reservationEventFactory(injector: Injector): Promise<AXPEntity | null>;

interface AXPReservationManagementReservationEventEntityModel {
    id: string;
    reservationId: string;
    reservation: {
        id: string;
        entityReference: string;
        resource: string;
    };
    reservationEventId: string;
    reservationEvent: {
        id: string;
        title: string;
    };
    eventDate: Date;
    actorId: string;
    actor: {
        id: string;
        username: string;
    };
    fromStatusId: string;
    fromStatus: {
        id: string;
        title: string;
    };
    toStatusId: string;
    toStatus: {
        id: string;
        title: string;
    };
}

declare abstract class AXPReservationManagementReservationEventService extends AXMEntityCrudServiceImpl<string, AXPReservationManagementReservationEventEntityModel> {
}
declare class AXPReservationManagementReservationEventServiceImpl extends AXPReservationManagementReservationEventService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationEventServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPReservationManagementReservationEventServiceImpl>;
}

declare function reservationStatusFactory(injector: Injector): Promise<AXPEntity | null>;

declare class AXPReservationManagementReservationStatusEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationStatusEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationStatusEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationStatusEntityModule>;
}

interface AXPReservationManagementReservationStatusEntityModel {
    id: string;
    name: string;
    title: string;
    color: string;
    icon: string;
}

declare abstract class AXPReservationManagementReservationStatusService extends AXMEntityCrudServiceImpl<string, AXPReservationManagementReservationStatusEntityModel> {
}
declare class AXPReservationManagementReservationStatusServiceImpl extends AXPReservationManagementReservationStatusService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationStatusServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPReservationManagementReservationStatusServiceImpl>;
}

declare function reservationTypeFactory(injector: Injector): Promise<AXPEntity | null>;

declare class AXPReservationManagementReservationTypeEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationTypeEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationTypeEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationTypeEntityModule>;
}

interface AXPReservationManagementReservationTypeEntityModel {
    id: string;
    name: string;
    title: string;
    isBlocking: boolean;
}

declare abstract class AXPReservationManagementReservationTypeService extends AXMEntityCrudServiceImpl<string, AXPReservationManagementReservationTypeEntityModel> {
}
declare class AXPReservationManagementReservationTypeServiceImpl extends AXPReservationManagementReservationTypeService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationTypeServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPReservationManagementReservationTypeServiceImpl>;
}

declare class AXMReservationManagementEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {
    private injector;
    preload(): AXPEntityPreloadEntity[];
    get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
    list(): Promise<{
        name: string;
        module: string;
    }[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMReservationManagementEntityProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMReservationManagementEntityProvider>;
}

declare const AXMReservationManagementMenuKeys: {
    readonly ReservationTypes: "reservation-management:Menu:ReservationTypes";
    readonly ReservationStatuses: "reservation-management:Menu:ReservationStatuses";
    readonly ReservationClasses: "reservation-management:Menu:ReservationClasses";
    readonly Reservations: "reservation-management:Menu:Reservations";
    readonly ReservationBoard: "reservation-management:Menu:ReservationBoard";
};

declare class AXMReservationManagementMenuProvider implements AXPMenuProvider {
    private readonly entityService;
    private readonly sessionService;
    provide(context: AXPMenuProviderContext): Promise<void>;
}

declare class AXMReservationManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {
    private readonly translateService;
    define(context: AXPPermissionDefinitionProviderContext): Promise<void>;
}

declare const AXMPermissionsKeys: {
    readonly ReservationManagement: {
        readonly Management: "ReservationManagement:Permission:Management";
        readonly ReservationType: {
            readonly Management: "ReservationManagement:Permission:ReservationType.Management";
        };
        readonly ReservationStatus: {
            readonly Management: "ReservationManagement:Permission:ReservationStatus.Management";
        };
        readonly ReservationClass: {
            readonly Management: "ReservationManagement:Permission:ReservationClass.Management";
        };
        readonly Reservation: {
            readonly Management: "ReservationManagement:Permission:Reservation.Management";
        };
    };
};

declare class AXPReservationManagementReservationClassEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationClassEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationClassEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationClassEntityModule>;
}

declare class AXPReservationManagementReservationClassStatusEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationClassStatusEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationClassStatusEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationClassStatusEntityModule>;
}

declare class AXPReservationManagementReservationStatusTransitionEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationStatusTransitionEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationStatusTransitionEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationStatusTransitionEntityModule>;
}

declare class AXPReservationManagementReservationResourceTypeEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationResourceTypeEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationResourceTypeEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationResourceTypeEntityModule>;
}

declare class AXPReservationManagementReservationEventEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPReservationManagementReservationEventEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXPReservationManagementReservationEventEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXPReservationManagementReservationEventEntityModule>;
}

declare class AXMReservationManagementModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMReservationManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMReservationManagementModule, never, [typeof AXPReservationManagementReservationTypeEntityModule, typeof AXPReservationManagementReservationStatusEntityModule, typeof AXPReservationManagementReservationClassEntityModule, typeof AXPReservationManagementReservationClassStatusEntityModule, typeof AXPReservationManagementReservationStatusTransitionEntityModule, typeof AXPReservationManagementReservationResourceTypeEntityModule, typeof AXPReservationManagementReservationEventEntityModule, typeof AXPReservationManagementReservationEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMReservationManagementModule>;
}

declare class AXMSearchCommandProvider extends AXPSearchCommandProvider {
    commands: AXPSearchResult[];
}

declare class AXMReservationManagementSearchCommandProvider extends AXPSearchCommandProvider {
    commands: AXPSearchResult[];
}

declare class AXMSettingProvider implements AXPSettingDefinitionProvider {
    provide(context: AXPSettingDefinitionProviderContext): Promise<void>;
}

declare class AXMReservationBoardPage {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMReservationBoardPage, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXMReservationBoardPage, "axm-reservation-board-page", never, {}, {}, never, never, true, never>;
}

export { AXMPermissionsKeys, AXMReservationBoardPage, AXMReservationManagementEntityProvider, AXMReservationManagementMenuKeys, AXMReservationManagementMenuProvider, AXMReservationManagementModule, AXMReservationManagementPermissionDefinitionProvider, AXMReservationManagementSearchCommandProvider, AXMSearchCommandProvider, AXMSettingProvider, AXPReservationManagementReservationClassService, AXPReservationManagementReservationClassServiceImpl, AXPReservationManagementReservationEntityModule, AXPReservationManagementReservationEventService, AXPReservationManagementReservationEventServiceImpl, AXPReservationManagementReservationService, AXPReservationManagementReservationServiceImpl, AXPReservationManagementReservationStatusEntityModule, AXPReservationManagementReservationStatusService, AXPReservationManagementReservationStatusServiceImpl, AXPReservationManagementReservationTypeEntityModule, AXPReservationManagementReservationTypeService, AXPReservationManagementReservationTypeServiceImpl, RootConfig, reservationClassFactory, reservationEventFactory, reservationFactory, reservationStatusFactory, reservationTypeFactory };
export type { AXPReservationManagementReservationClassEntityModel, AXPReservationManagementReservationEntityModel, AXPReservationManagementReservationEventEntityModel, AXPReservationManagementReservationStatusEntityModel, AXPReservationManagementReservationTypeEntityModel };
