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

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
        route: string;
    };
    module: {
        route: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        maintenance: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        maintenanceType: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

declare class AXMMaintenanceManagementEntityProvider implements AXPEntityDefinitionLoader {
    private readonly injector;
    get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
    list(): Promise<{
        name: string;
        module: string;
    }[]>;
}

declare const AXMMaintenanceManagementFeatureKeys: {
    readonly Management: "MaintenanceManagement:Feature:Management";
};

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

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

declare class AXMMaintenanceManagementModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMMaintenanceManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMMaintenanceManagementModule, never, [typeof AXMMaintenanceManagementMaintenanceEntityModule, typeof AXMMaintenanceManagementMaintenanceTypeEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMMaintenanceManagementModule>;
}

declare const AXMMaintenanceManagementMenuKeys: {
    readonly Root: "MaintenanceManagement:Menu";
    readonly Maintenances: "MaintenanceManagement:Menu:Maintenances";
    readonly MaintenanceTypes: "MaintenanceManagement:Menu:MaintenanceTypes";
};

/**
 * Maintenance Management Menu Provider.
 * Provides menu items for the Maintenance Management module with permission and feature checks.
 */
declare class AXMMaintenanceManagementMenuProvider implements AXPMenuProvider {
    private readonly entityService;
    provide(context: AXPMenuProviderContext): Promise<void>;
}

declare class AXMMaintenanceManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {
    define(context: AXPPermissionDefinitionProviderContext): Promise<void>;
}

declare const AXMMaintenanceManagementPermissionKeys: {
    readonly MaintenanceManagement: {
        readonly Management: "MaintenanceManagement:Permission:MaintenanceManagement.Management";
        readonly MaintenanceType: {
            readonly Management: "MaintenanceManagement:Permission:MaintenanceType.Management";
            readonly View: "MaintenanceManagement:Permission:MaintenanceType.View";
            readonly Create: "MaintenanceManagement:Permission:MaintenanceType.Create";
            readonly Update: "MaintenanceManagement:Permission:MaintenanceType.Update";
            readonly Delete: "MaintenanceManagement:Permission:MaintenanceType.Delete";
        };
        readonly Maintenance: {
            readonly Management: "MaintenanceManagement:Permission:Maintenance.Management";
            readonly View: "MaintenanceManagement:Permission:Maintenance.View";
            readonly Create: "MaintenanceManagement:Permission:Maintenance.Create";
            readonly Update: "MaintenanceManagement:Permission:Maintenance.Update";
            readonly Delete: "MaintenanceManagement:Permission:Maintenance.Delete";
        };
    };
};

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

declare enum AXMPerformedBy {
    Employee = "employee",
    ThirdParty = "thirdParty"
}
declare const idAXPMetaData = AXMPerformedBy.Employee;
interface AXMMaintenanceManagementMaintenanceEntityModel {
    id: string;
    entityId: string;
    entity: {
        id: string;
        title: string;
    };
    resourceId: string;
    resource?: {
        id: string;
        title: string;
        code: string;
    };
    dateAdded: Date;
    maintenanceTypeId: string;
    maintenanceType?: {
        id: string;
        title: string;
        maintenanceTypeLabel?: string;
    };
    performedBy: AXMPerformedBy;
    employeeId?: string;
    employee?: {
        id: string;
        displayName?: string;
    };
    thirdPartyId?: string;
    thirdParty?: {
        id: string;
        displayName?: string;
    };
    description?: string;
}

declare function factory$1(injector: Injector): Promise<AXPEntity | null>;

interface AXMMaintenanceManagementMaintenanceTypeEntityModel {
    id: string;
    name: string;
    title: string;
    questionnaireId?: string;
    questionnaire?: {
        id: string;
        title: string;
    };
}

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

export { AXMMaintenanceManagementEntityProvider, AXMMaintenanceManagementFeatureKeys, AXMMaintenanceManagementMenuKeys, AXMMaintenanceManagementMenuProvider, AXMMaintenanceManagementModule, AXMMaintenanceManagementPermissionDefinitionProvider, AXMMaintenanceManagementPermissionKeys, AXMMaintenanceManagementSearchCommandProvider, AXMPerformedBy, RootConfig, idAXPMetaData, factory$1 as maintenanceEntityFactory, factory as maintenanceTypeEntityFactory };
export type { AXMMaintenanceManagementMaintenanceEntityModel, AXMMaintenanceManagementMaintenanceTypeEntityModel };
