import * as i0 from '@angular/core';
import { Injector } from '@angular/core';
import { AXPAppStartUpService } from '@acorex/platform/core';
import * as i1 from '@angular/common';
import * as i6 from '@acorex/platform/layout/components';
import { AXPEntity, AXPMenuProvider, AXPMenuProviderContext, AXPSearchCommandProvider, AXPSearchResult, AXPCurrency, AXPLocaleProfile, AXPLanguage, AXPTimeZone } from '@acorex/platform/common';
import { AXPEntityModel, AXMEntityCrudServiceImpl, AXPEntityDefinitionLoader } from '@acorex/platform/layout/entity';
import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';
import { AXLocaleProfileProvider, AXLocaleProfile } from '@acorex/core/locale';

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

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

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

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

declare class AXMLocaleManagementModule {
    constructor(appInitService: AXPAppStartUpService, injector: Injector);
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLocaleManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMLocaleManagementModule, never, [typeof i1.CommonModule, typeof AXMLanguagesEntityModule, typeof AXMLocalesEntityModule, typeof AXMTimezonesEntityModule, typeof AXMCurrenciesEntityModule, typeof i6.AXPComponentSlotModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMLocaleManagementModule>;
}

declare const RootConfig: {
    config: {
        i18n: string;
    };
    module: {
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        languages: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        locales: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        timezones: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        currencies: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

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

interface AXMLocaleManagementLanguagesEntityModel extends AXPEntityModel<string> {
    code: string;
    title: string;
    nativeTitle: string;
    isRTL: boolean;
    isActive: boolean;
    createdAt: Date;
    updatedAt: Date;
}

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

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

interface AXMLocaleManagementLocalesEntityModel extends AXPEntityModel<string> {
    languageId: string;
    code: string;
    title: string;
    countryCode: string;
    isDefault: boolean;
    isActive: boolean;
    createdAt: Date;
    updatedAt: Date;
}

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

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

interface AXMLocaleManagementTimezonesEntityModel extends AXPEntityModel<string> {
    code: string;
    title: string;
    abbreviation: string;
    standardOffset: number;
    supportsDST: boolean;
    region: string;
    isActive: boolean;
    createdAt: Date;
    updatedAt: Date;
}

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

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

interface AXMLocaleManagementCurrenciesEntityModel extends AXPEntityModel<string> {
    code: string;
    title: string;
    symbol: string;
    decimalPlaces: number;
    isActive: boolean;
    createdAt: Date;
    updatedAt: Date;
}

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

declare class AXMLocaleManagementEntityProvider implements AXPEntityDefinitionLoader {
    private injector;
    constructor(injector: Injector);
    get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLocaleManagementEntityProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMLocaleManagementEntityProvider>;
}

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

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

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

declare class AXMLocaleManagementService {
    private currenciesService;
    private languagesService;
    private timezonesService;
    private localesService;
    private activeQuery;
    getCurrencies(): Promise<AXPCurrency[]>;
    getLocaleProfiles(): Promise<AXPLocaleProfile[]>;
    getLanguages(): Promise<AXPLanguage[]>;
    getLocales(): Promise<AXPLanguage[]>;
    getAvailableLanguages(): Promise<AXPLanguage[]>;
    getTimeZones(): Promise<AXPTimeZone[]>;
    getBrowserTimeZoneCode(): Promise<string>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLocaleManagementService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMLocaleManagementService>;
}

/**
 * Custom locale profile provider that integrates with the locale-management module
 * to provide profiles from the platform's data instead of the default UI library profiles
 */
declare class AXMLocaleProfileProviderService implements AXLocaleProfileProvider {
    private readonly localeManagementService;
    /**
     * Provides locale profiles from the locale-management module
     * This allows the platform to override the default UI library profiles
     */
    provide(): Promise<Record<string, () => Promise<AXLocaleProfile> | AXLocaleProfile>>;
    /**
     * Validates that a profile has all required properties
     */
    private isValidProfile;
    /**
     * Gets the list of available locale codes from the locale-management module
     * This can be used by other services to check available locales
     */
    getAvailableLocaleCodes(): Promise<string[]>;
    /**
     * Checks if a specific locale is available
     */
    hasLocale(localeCode: string): Promise<boolean>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLocaleProfileProviderService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMLocaleProfileProviderService>;
}

declare enum AXPRegionalSetting {
    LocaleProfile = "regional:locale-profile",
    TimeZone = "regional:timezone",
    Language = "regional:language",
    Country = "regional:country",
    Calendar = "regional:calendar",
    FirstDayOfWeek = "regional:first-day-of-week",
    WeekendDays = "regional:weekend-days",
    ShortDate = "regional:short-date",
    MediumDate = "regional:medium-date",
    LongDate = "regional:long-date",
    ShortTime = "regional:short-time",
    MediumTime = "regional:medium-time",
    LongTime = "regional:long-time",
    MeasurementUnits = "regional:measurement-units",
    TemperatureUnits = "regional:temperature-units",
    DistanceUnits = "regional:distance-units",
    WeightUnits = "regional:weight-units",
    VolumeUnits = "regional:volume-units",
    SpeedUnits = "regional:speed-units",
    AreaUnits = "regional:area-units"
}

export { AXMCurrenciesEntityModule, AXMCurrenciesService, AXMCurrenciesServiceImpl, AXMLanguagesEntityModule, AXMLanguagesService, AXMLanguagesServiceImpl, AXMLocaleManagementEntityProvider, AXMLocaleManagementMenuProvider, AXMLocaleManagementModule, AXMLocaleManagementPermissionDefinitionProvider, AXMLocaleManagementSearchCommandProvider, AXMLocaleManagementService, AXMLocaleProfileProviderService, AXMLocalesEntityModule, AXMLocalesService, AXMLocalesServiceImpl, AXMTimezonesEntityModule, AXMTimezonesService, AXMTimezonesServiceImpl, AXPRegionalSetting, RootConfig, currenciesFactory, languagesFactory, localesFactory, timezonesFactory };
export type { AXMLocaleManagementCurrenciesEntityModel, AXMLocaleManagementLanguagesEntityModel, AXMLocaleManagementLocalesEntityModel, AXMLocaleManagementTimezonesEntityModel };
