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

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

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

declare class AXMTenantManagementModule {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMTenantManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMTenantManagementModule, never, [typeof AXMTenantEntityModule, typeof AXMTenantUserEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMTenantManagementModule>;
}

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
    };
    module: {
        route: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        tenant: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        tenantUser: {
            name: string;
            source: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};
declare const AXMTenantManagementModuleConst: {
    moduleName: string;
    moduleRoute: string;
    i18n: string;
};

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

interface AXMTenantManagementTenantEntityModel extends AXPEntityModel<string> {
    name: string;
    title: string;
    description?: string;
    statusId?: AXPSystemStatusType;
    logo?: AXPLogoConfig;
    color?: string;
    email?: string;
    phone?: string;
    website?: string;
    supportEmail?: string;
    countryId?: string;
    country?: {
        id: string;
        title: string;
    };
    stateId?: string;
    state?: {
        id: string;
        title: string;
    };
    cityId?: string;
    city?: {
        id: string;
        title: string;
    };
    timezone?: string;
    timezoneData?: {
        code: string;
        title: string;
    };
    language?: string;
    languageData?: {
        code: string;
        title: string;
    };
    domain?: string;
    subdomain?: string;
    userId?: string;
    user?: any;
    registrationDate?: Date;
    expiryDate?: Date;
    maxUsers?: number;
    maxStorage?: number;
}

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

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

interface AXMTenantManagementTenantUserEntityModel extends AXPEntityModel<string> {
    tenantId: string;
    tenant?: {
        id: string;
        title: string;
    };
    userId: string;
    user?: {
        id: string;
        username: string;
        displayName: string;
    };
    roleId: string;
    role?: {
        id: string;
        name: string;
        title: string;
    };
    statusId?: AXPSystemStatusType;
    startDate: Date;
    endDate?: Date;
    createdAt?: Date;
    updatedAt?: Date;
}

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

declare class AXMTenantManagementEntityProvider 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<AXMTenantManagementEntityProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMTenantManagementEntityProvider>;
}

/**
 * Tenant Management Feature Definition Provider.
 * Provides feature definitions for the Tenant Management module.
 */
declare class AXMTenantManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {
    provide(context: AXPFeatureDefinitionProviderContext): Promise<void>;
}

declare const AXMTenantManagementFeatureKeys: {};

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

declare const AXMTenantManagementMenuKeys: {
    readonly Root: "TenantManagement:Menu";
    readonly Tenants: "TenantManagement:Menu:Tenants";
};

declare const AXMTenantManagementPermissionsKeys: {
    TenantManagement: {
        Management: string;
    };
};

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

declare class AXMTenantSettingProvider implements AXPSettingDefinitionProvider {
    private readonly translationService;
    provide(context: AXPSettingDefinitionProviderContext): Promise<void>;
}

export { AXMTenantEntityModule, AXMTenantManagementEntityProvider, AXMTenantManagementFeatureDefinitionProvider, AXMTenantManagementFeatureKeys, AXMTenantManagementMenuKeys, AXMTenantManagementModule, AXMTenantManagementModuleConst, AXMTenantManagementModuleMenuProvider, AXMTenantManagementPermissionsKeys, AXMTenantManagementTenantUserEntityService, AXMTenantManagementTenantUserEntityServiceImpl, AXMTenantSearchCommandProvider, AXMTenantService, AXMTenantServiceImpl, AXMTenantSettingProvider, AXMTenantUserEntityModule, RootConfig, tenantEntityFactory, tenantUserEntityFactory };
export type { AXMTenantManagementTenantEntityModel, AXMTenantManagementTenantUserEntityModel };
