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

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

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
    };
    module: {
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        educationLevel: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        maritalStatus: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        personIdentifierType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        personRelationshipType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        religion: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

interface AXMPersonCoreEducationLevelEntityModel {
    id: string;
    title: string;
    description?: string | null;
}

interface AXMPersonCoreMaritalStatusEntityModel {
    id: string;
    title: string;
    description?: string | null;
}

interface AXMPersonCorePersonIdentifierTypeEntityModel {
    id: string;
    title: string;
    description?: string | null;
    scope: 'global' | 'national' | 'regional';
    formatRegex?: string | null;
    minLength?: number | null;
    maxLength?: number | null;
    isUnique: boolean;
}

interface AXMPersonCorePersonRelationshipTypeEntityModel {
    id: string;
    title: string;
    description?: string | null;
    isDirectional: boolean;
}

interface AXMPersonCoreReligionEntityModel {
    id: string;
    title: string;
    description?: string | null;
}

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

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

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

declare const AXMPersonCorePermissionKeys: {
    readonly PersonCore: {
        readonly EducationLevel: {
            readonly Management: "PersonCore:Permission:EducationLevel.Management";
        };
        readonly MaritalStatus: {
            readonly Management: "PersonCore:Permission:MaritalStatus.Management";
        };
        readonly PersonIdentifierType: {
            readonly Management: "PersonCore:Permission:PersonIdentifierType.Management";
        };
        readonly PersonRelationshipType: {
            readonly Management: "PersonCore:Permission:PersonRelationshipType.Management";
        };
        readonly Religion: {
            readonly Management: "PersonCore:Permission:Religion.Management";
        };
    };
};

export { AXMPersonCoreEntityProvider, AXMPersonCoreMenuProvider, AXMPersonCoreModule, AXMPersonCorePermissionDefinitionProvider, AXMPersonCorePermissionKeys, RootConfig };
export type { AXMPersonCoreEducationLevelEntityModel, AXMPersonCoreMaritalStatusEntityModel, AXMPersonCorePersonIdentifierTypeEntityModel, AXMPersonCorePersonRelationshipTypeEntityModel, AXMPersonCoreReligionEntityModel };
