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

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

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
    };
    module: {
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        manufacturer: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        industry: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        businessType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        businessStatus: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        partyType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        partySegment: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        lifecycleStage: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

interface AXMBusinessCoreManufacturerEntityModel extends AXPEntityModel<string> {
    code?: string;
    title: string;
    description?: string;
    logo?: string;
    countryOfOrigin?: string;
    website?: string;
    contactEmail?: string;
    contactPhone?: string;
    isDisabled?: boolean;
    categoryIds?: string[];
    categories?: Array<{
        id: string;
        title: string;
    }>;
}

interface AXMBusinessCoreIndustryEntityModel {
    id: string;
    code: string;
    title: string;
    description?: string | null;
    isDisabled?: boolean;
}

interface AXMBusinessCoreBusinessTypeEntityModel {
    id: string;
    code: string;
    title: string;
    description?: string | null;
    isDisabled?: boolean;
}

interface AXMBusinessCoreBusinessStatusEntityModel {
    id: string;
    code: string;
    title: string;
    description?: string | null;
    isDisabled?: boolean;
}

interface AXMBusinessCorePartyTypeEntityModel extends AXPEntityModel<string> {
    code: string;
    title: string;
    description?: string | null;
    isDisabled?: boolean;
}

declare function partyTypeFactory(injector: Injector): Promise<AXPEntity>;

interface AXMBusinessCorePartySegmentEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string | null;
    color?: string | null;
    isArchived?: boolean;
}

declare function partySegmentFactory(injector: Injector): Promise<AXPEntity>;

interface AXMBusinessCoreLifecycleStageEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string | null;
    order?: number;
}

declare function lifecycleStageFactory(injector: Injector): Promise<AXPEntity>;

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

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

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

declare const AXMBusinessCorePermissionKeys: {
    readonly BusinessCore: {
        readonly Manufacturer: {
            readonly Management: "BusinessCore:Permission:Manufacturer.Management";
        };
        readonly Industry: {
            readonly Management: "BusinessCore:Permission:Industry.Management";
        };
        readonly BusinessType: {
            readonly Management: "BusinessCore:Permission:BusinessType.Management";
        };
        readonly BusinessStatus: {
            readonly Management: "BusinessCore:Permission:BusinessStatus.Management";
        };
        readonly PartyType: {
            readonly Management: "BusinessCore:Permission:PartyType.Management";
        };
        readonly PartySegment: {
            readonly Management: "BusinessCore:Permission:PartySegment.Management";
        };
        readonly LifecycleStage: {
            readonly Management: "BusinessCore:Permission:LifecycleStage.Management";
        };
    };
};

declare const AXMBusinessCoreMenuKeys: {
    readonly Root: "business-core";
    readonly Manufacturers: "business-core.manufacturers";
    readonly Divider1: "business-core.divider-1";
    readonly Industries: "business-core.industries";
    readonly BusinessTypes: "business-core.business-types";
    readonly BusinessStatuses: "business-core.business-statuses";
    readonly Divider2: "business-core.divider-2";
    readonly PartyTypes: "business-core.party-types";
    readonly PartySegments: "business-core.party-segments";
    readonly LifecycleStages: "business-core.lifecycle-stages";
};

export { AXMBusinessCoreEntityProvider, AXMBusinessCoreMenuKeys, AXMBusinessCoreMenuProvider, AXMBusinessCoreModule, AXMBusinessCorePermissionDefinitionProvider, AXMBusinessCorePermissionKeys, RootConfig, lifecycleStageFactory, partySegmentFactory, partyTypeFactory };
export type { AXMBusinessCoreBusinessStatusEntityModel, AXMBusinessCoreBusinessTypeEntityModel, AXMBusinessCoreIndustryEntityModel, AXMBusinessCoreLifecycleStageEntityModel, AXMBusinessCoreManufacturerEntityModel, AXMBusinessCorePartySegmentEntityModel, AXMBusinessCorePartyTypeEntityModel };
