import type { ApiContext } from './_shared';
export interface ApplicationListDto {
    id: string;
    code: string;
    label: string;
    description: string | null;
    icon: string | null;
    iconType: string;
    route: string | null;
    displayOrder: number;
    isActive: boolean;
    zone: string;
    modulesCount: number;
}
export interface ApplicationDetailDto {
    id: string;
    code: string;
    label: string;
    description: string | null;
    icon: string | null;
    iconType: string;
    route: string | null;
    displayOrder: number;
    isActive: boolean;
    zone: string;
    modules: ApplicationModuleDto[];
    createdAt: string;
    updatedAt: string | null;
}
export interface ApplicationModuleDto {
    id: string;
    code: string;
    label: string;
    description: string | null;
    icon: string | null;
    iconType: string;
    route: string | null;
    displayOrder: number;
    isActive: boolean;
    sectionsCount: number;
}
export interface UpdateApplicationRequest {
    label: string;
    description?: string;
    icon?: string;
    iconType?: string;
    route?: string;
    displayOrder: number;
}
export interface UpdateModuleRequest {
    label: string;
    description?: string;
    icon?: string;
    iconType?: string;
    route?: string;
    displayOrder: number;
}
export interface ModuleSectionDto {
    id: string;
    code: string;
    label: string;
    description: string | null;
    icon: string | null;
    iconType: string;
    route: string | null;
    displayOrder: number;
    isActive: boolean;
}
export interface ReorderItemDto {
    id: string;
    displayOrder: number;
}
export interface ReorderRequest {
    items: ReorderItemDto[];
}
export interface ApplicationTenantDto {
    tenantId: string;
    tenantName: string;
    tenantSlug: string;
    tenantType: string;
    tenantStatus: string;
    accessLevel: string;
    assignedAt: string;
    assignedBy: string | null;
}
export interface AvailableTenantForAppDto {
    id: string;
    name: string;
    slug: string;
    type: string;
}
export interface AvailableTenantsResponse {
    tenants: AvailableTenantForAppDto[];
    isInDefaultPersonalTemplate: boolean;
}
export type ApplicationAccessLevel = 'FullAccess' | 'RequestAccess' | 'Disabled';
export interface BulkAssignTenantsRequest {
    tenantIds: string[];
    accessLevel?: ApplicationAccessLevel;
    accessMode?: 'full' | 'custom';
    moduleIds?: string[];
    sectionIds?: string[];
    mergeMode?: 'merge' | 'replace';
}
export interface BulkAssignResultItem {
    tenantId: string;
    tenantName: string;
    success: boolean;
    error?: string;
}
export interface BulkAssignTenantsResponse {
    successCount: number;
    failedCount: number;
    results: BulkAssignResultItem[];
}
export interface BulkAssignAppsRequest {
    applicationIds: string[];
    accessLevel: ApplicationAccessLevel;
    accessMode: 'full' | 'custom';
    moduleIds?: string[];
    sectionIds?: string[];
}
export interface BulkAssignAppsResultItem {
    applicationId: string;
    applicationName: string;
    success: boolean;
    errorMessage?: string;
}
export interface BulkAssignAppsResponse {
    successCount: number;
    failedCount: number;
    results: BulkAssignAppsResultItem[];
}
declare const _createApplicationsApi: (apiContext: ApiContext) => {
    getAll: (params?: {
        contextId?: string;
        isActive?: boolean;
    }) => Promise<ApplicationListDto[]>;
    getById: (id: string) => Promise<ApplicationDetailDto>;
    update: (id: string, data: UpdateApplicationRequest) => Promise<ApplicationDetailDto>;
    activate: (id: string) => Promise<unknown>;
    deactivate: (id: string) => Promise<unknown>;
    getModules: (appId: string) => Promise<ApplicationModuleDto[]>;
    updateModule: (appId: string, moduleId: string, data: UpdateModuleRequest) => Promise<ApplicationModuleDto>;
    getModuleSections: (appId: string, moduleId: string) => Promise<ModuleSectionDto[]>;
    reorderModules: (appId: string, items: ReorderItemDto[]) => Promise<unknown>;
    reorderSections: (appId: string, moduleId: string, items: ReorderItemDto[]) => Promise<unknown>;
    getTenants: (appId: string) => Promise<ApplicationTenantDto[]>;
    getAvailableTenants: (appId: string) => Promise<AvailableTenantsResponse>;
    assignToTenant: (appId: string, tenantId: string, accessLevel?: ApplicationAccessLevel) => Promise<ApplicationTenantDto>;
    removeFromTenant: (appId: string, tenantId: string) => Promise<unknown>;
    updateTenantAccessLevel: (appId: string, tenantId: string, accessLevel: ApplicationAccessLevel) => Promise<unknown>;
    bulkAssignTenants: (appId: string, request: BulkAssignTenantsRequest) => Promise<BulkAssignTenantsResponse>;
};
export type ApplicationsApi = ReturnType<typeof _createApplicationsApi>;
export declare const createApplicationsApi: (apiContext: ApiContext) => ApplicationsApi;
export {};
//# sourceMappingURL=applications.d.ts.map