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

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

declare class AXMContentManagementModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMContentManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMContentManagementModule, never, [typeof i1.AXPComponentSlotModule, typeof AXMPromotionEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMContentManagementModule>;
}

declare const RootConfig: {
    config: {
        i18n: string;
    };
    module: {
        module: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        promotion: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        glossary: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

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

declare class AXMMenuProvider implements AXPMenuProvider {
    private entityService;
    private sessionService;
    provide(context: AXPMenuProviderContext): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMMenuProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMMenuProvider>;
}

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

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

interface AXMPromotionEntityModel extends AXPEntityModel<string> {
    name: string;
    title: string;
    body: string;
    imageId?: string;
    image?: AXPFileStorageInfo;
    contentType?: AXMSelectModel;
    shape?: AXMSelectModel;
    placement?: AXMSelectModel;
}
interface AXMSelectModel {
    name: string;
    title: string;
}

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

declare class AXMPromotionSlotComponent implements OnInit {
    location: string;
    notificationChannelService: AXMAppPromotionService;
    listData: WritableSignal<AXMPromotionEntityModel[]>;
    private fileStorage;
    ngOnInit(): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMPromotionSlotComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXMPromotionSlotComponent, "acorex-platform-promotion-slot", never, {}, {}, never, never, true, never>;
}

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

declare class AXMPromotionDataSourceDefinition implements AXPDataSourceDefinitionProvider {
    protected promotionService: AXMAppPromotionService;
    protected i18n: string;
    items(): Promise<AXPDataSourceDefinition[]>;
}

export { AXMAppPromotionService, AXMContentManagementModule, AXMEntityProvider, AXMMenuProvider, AXMPromotionDataSourceDefinition, AXMPromotionEntityModule, AXMPromotionServiceImpl, AXMPromotionSlotComponent, AXMSearchCommandProvider, AXMSettingProvider, RootConfig, promotionEntityFactory };
export type { AXMPromotionEntityModel, AXMSelectModel };
