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

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

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

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

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

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

declare const AXPSupplierManagementMenuKeys: {
    readonly Root: "SupplierManagement:Menu";
    readonly Suppliers: "SupplierManagement:Menu:Suppliers";
};

declare const AXPSupplierManagementPermissionKeys: {
    readonly Suppliers: {
        readonly Management: "SupplierManagement:Permission:Suppliers.Management";
        readonly View: "SupplierManagement:Permission:Suppliers.View";
        readonly Create: "SupplierManagement:Permission:Suppliers.Create";
        readonly Edit: "SupplierManagement:Permission:Suppliers.Edit";
        readonly Delete: "SupplierManagement:Permission:Suppliers.Delete";
    };
};

interface AXMSupplierManagementSupplierEntityModel extends AXPEntityModel<string> {
    supplierCode: string;
    personId: string;
    person?: {
        id: string;
        displayName: string;
    };
    supplierTypeId?: string;
    partyType?: {
        id: string;
        title: string;
    };
    segmentId?: string;
    partySegment?: {
        id: string;
        title: string;
    };
    status?: 'active' | 'inactive' | 'blocked' | 'archived' | 'under-review';
    since?: Date;
    isPreferred?: boolean;
    rating?: number;
    paymentTermsId?: string;
    paymentTerms?: {
        id: string;
        title: string;
    };
    defaultCurrencyId?: string;
    defaultCurrency?: {
        id: string;
        code: string;
        symbol: string;
    };
    purchasingManagerId?: string;
    purchasingManager?: {
        id: string;
        employeeCode?: string;
        person?: {
            displayName?: string;
        };
    };
    categoryIds?: string[];
    categories?: Array<{
        id: string;
        title: string;
    }>;
    notes?: string;
}

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

export { AXMSupplierManagementEntityProvider, AXMSupplierManagementModule, AXMSupplierManagementPermissionDefinitionProvider, AXMSupplierMenuProvider, AXPSupplierManagementMenuKeys, AXPSupplierManagementPermissionKeys, RootConfig, supplierFactory };
export type { AXMSupplierManagementSupplierEntityModel };
