import * as i0 from '@angular/core';
import { Injector } from '@angular/core';
import * as i1 from '@angular/common';
import { AXPEntityModel, AXMEntityCrudServiceImpl, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';
import { AXPEntity, AXPMenuProvider, AXPMenuProviderContext, AXPSearchCommandProvider, AXPSearchResult } from '@acorex/platform/common';
import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';
import { AXRange } from '@acorex/cdk/common';

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

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

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

declare class AXMCalendarManagementModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMCalendarManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMCalendarManagementModule, never, [typeof i1.CommonModule, typeof AXMCalendarEntityModule, typeof AXMCalendarEventEntityModule, typeof AXMCalendarEventTypeEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMCalendarManagementModule>;
}

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
    };
    module: {
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        calendar: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        calendarEvent: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        calendarEventType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

interface AXMCalendarManagementCalendarEventTypeEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string;
    isHoliday?: boolean;
    color: string;
    icon?: string;
    isActive: boolean;
    isDefault: boolean;
    order: number;
}

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

interface AXMCalendarManagementCalendarEventEntityModel extends AXPEntityModel<string> {
    calendarId: string;
    title: string;
    description?: string;
    typeId: string;
    date: Date;
    isRecurring: boolean;
    recurrenceRule?: string;
    isActive: boolean;
    order: number;
    calendar?: {
        id: string;
        title: string;
    };
    type?: {
        id: string;
        title: string;
        color: string;
        icon?: string;
        isHoliday?: boolean;
    };
}

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

interface AXMCalendarManagementCalendarEntityModel extends AXPEntityModel<string> {
    name: string;
    title: string;
    description?: string;
    calendarTypeId: any;
    parentId?: string;
    weekends: string[];
    firstDayOfWeek: string;
    isActive: boolean;
    isTemplate: boolean;
    order: number;
    calendarType?: any;
    parent?: any;
    dateExceptions?: any[];
    scopes?: any[];
}

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

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

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

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

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

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

declare class AXMCalendarManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {
    private injector;
    private readonly translateService;
    constructor(injector: Injector);
    define(context: AXPPermissionDefinitionProviderContext): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMCalendarManagementPermissionDefinitionProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMCalendarManagementPermissionDefinitionProvider>;
}

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

interface AXMCalendarManagementEvent {
    date: Date;
    type: {
        color: string;
        icon?: string;
        isHoliday?: boolean;
    };
    title: string;
    description?: string;
}
declare class AXMCalendarManagementService {
    calendarEventService: AXMCalendarEventService;
    calendarEventTypeService: AXMCalendarEventTypeService;
    getEvents(range: AXRange<Date>): Promise<AXMCalendarManagementEvent[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMCalendarManagementService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMCalendarManagementService>;
}

export { AXMCalendarEventService, AXMCalendarEventServiceImpl, AXMCalendarEventTypeService, AXMCalendarEventTypeServiceImpl, AXMCalendarManagementEntityProvider, AXMCalendarManagementMenuProvider, AXMCalendarManagementModule, AXMCalendarManagementPermissionDefinitionProvider, AXMCalendarManagementSearchCommandProvider, AXMCalendarManagementService, AXMCalendarService, AXMCalendarServiceImpl, RootConfig, calendarEventFactory, calendarEventTypeFactory, calendarFactory };
export type { AXMCalendarManagementCalendarEntityModel, AXMCalendarManagementCalendarEventEntityModel, AXMCalendarManagementCalendarEventTypeEntityModel };
