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

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

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

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

declare class AXMLocationManagementModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLocationManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMLocationManagementModule, never, [typeof i1.CommonModule, typeof AXMLocationEntityModule, typeof AXMLocationTypeEntityModule, typeof AXMGeographicRegionEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMLocationManagementModule>;
}

declare const RootConfig: {
    config: {
        i18n: string;
    };
    module: {
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        location: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        locationType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        geographicRegion: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

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

interface AXMLocationManagementLocationEntityModel extends AXPEntityModel<string> {
    title: string;
    code?: string;
    reference?: {
        id: string;
        type: string;
    };
    locationTypeId?: string;
    locationType?: {
        id: string;
        title: string;
        description?: string;
        icon?: string;
        color?: string;
    };
    street1: string;
    street2?: string;
    countryId?: string;
    stateId?: string;
    cityId?: string;
    districtId?: string;
    postalCode: string;
    coordinates?: string;
    description?: string;
    parentLocationId?: string;
    isPrimary?: boolean;
    isActive: boolean;
    validFrom?: Date;
    validTo?: Date;
    timezone?: string;
}

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

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

interface AXMLocationManagementLocationTypeEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string;
    icon?: string;
    color?: string;
    isActive: boolean;
}

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

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

interface AXMLocationManagementGeographicRegionEntityModel extends AXPEntityModel<string> {
    title: string;
    code?: string;
    type: string;
    parentId?: string;
    coordinates?: string;
    timezone?: string;
    population?: number;
    area?: number;
    currency?: string;
    isActive: boolean;
}
interface GeographicRegionHierarchy {
    country?: AXMLocationManagementGeographicRegionEntityModel;
    state?: AXMLocationManagementGeographicRegionEntityModel;
    city?: AXMLocationManagementGeographicRegionEntityModel;
    district?: AXMLocationManagementGeographicRegionEntityModel;
}

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

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

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

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

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

declare class AXMLocationManagementService {
    private geographicRegionService;
    getCountries(): Promise<AXPGeoLocation[]>;
    getProvinces(countryId?: string): Promise<AXPGeoLocation[]>;
    getCities(filter?: {
        countryId?: string;
        provinceId?: string;
    }): Promise<AXPGeoLocation[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLocationManagementService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMLocationManagementService>;
}

export { AXMGeographicRegionEntityModule, AXMGeographicRegionService, AXMGeographicRegionServiceImpl, AXMLocationEntityModule, AXMLocationManagementEntityProvider, AXMLocationManagementMenuProvider, AXMLocationManagementModule, AXMLocationManagementService, AXMLocationServiceImpl as AXMLocationService, AXMLocationTypeEntityModule, AXMLocationTypeServiceImpl as AXMLocationTypeService, AXMSearchCommandProvider, AXMSettingProvider, RootConfig, geographicRegionFactory, locationFactory, locationTypeFactory };
export type { AXMLocationManagementGeographicRegionEntityModel, AXMLocationManagementLocationEntityModel, AXMLocationManagementLocationTypeEntityModel, GeographicRegionHierarchy };
