import * as i0 from '@angular/core';
import { Injector } from '@angular/core';
import { AXPEntity, AXPMenuProvider, AXPMenuProviderContext, AXPSearchCommandProvider, AXPSearchResult, AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex/platform/common';
import { AXPEntityModel, AXMEntityCrudServiceImpl, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';

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

declare class AXMApplicationManagementModule {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMApplicationManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMApplicationManagementModule, never, [typeof AXMApplicationEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMApplicationManagementModule>;
}

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
    };
    module: {
        route: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        application: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        module: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        edition: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        feature: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};
declare const AXMApplicationManagementModuleConst: {
    moduleName: string;
    moduleRoute: string;
    i18n: string;
};

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

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

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

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

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

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

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

interface AXMApplicationManagementFeatureEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string;
    parentId?: string;
}

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

interface AXMApplicationManagementModuleEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string;
    featureIds: string[];
    features: AXMApplicationManagementFeatureEntityModel[];
}

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

interface AXMApplicationManagementEditionEntityModel extends AXPEntityModel<string> {
    moduleIds: string[];
    modules: AXMApplicationManagementModuleEntityModel[];
    title: string;
    description?: string;
}

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

interface AXMApplicationManagementApplicationEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string;
    editionIds: string[];
    editions: AXMApplicationManagementEditionEntityModel[];
}

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

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

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

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

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

export { AXMApplicationEntityModule, AXMApplicationManagementModule, AXMApplicationManagementModuleConst, AXMApplicationManagmentModuleMenuProvider, AXMApplicationService, AXMApplicationServiceImpl, AXMEditionEntityModule, AXMEditionService, AXMEditionServiceImpl, AXMEntityProvider, AXMFeatureEntityModule, AXMFeatureService, AXMFeatureServiceImpl, AXMModuleEntityModule, AXMModuleService, AXMModuleServiceImpl, AXMSearchCommandProvider, AXMSettingProvider, RootConfig, applicationEntityFactory, editionEntityFactory, featureEntityFactory, moduleEntityFactory };
export type { AXMApplicationManagementApplicationEntityModel, AXMApplicationManagementEditionEntityModel, AXMApplicationManagementFeatureEntityModel, AXMApplicationManagementModuleEntityModel };
