/**
 * Tenant Management Types
 */
import type { BaseEntity, ID, PaginatedResponse } from '@dbs-portal/core-shared';
/**
 * Tenant entity
 */
export interface Tenant extends BaseEntity {
    name: string;
    displayName: string;
    connectionString?: string;
    isActive: boolean;
    features: TenantFeature[];
    settings: TenantSettings;
    statistics: TenantStatistics;
    metadata?: Record<string, any>;
}
/**
 * Tenant feature configuration
 */
export interface TenantFeature {
    name: string;
    displayName: string;
    isEnabled: boolean;
    value?: any;
    expiresAt?: Date;
    metadata?: Record<string, any>;
}
/**
 * Tenant settings
 */
export interface TenantSettings {
    maxUsers?: number;
    maxStorage?: number;
    allowedDomains?: string[];
    customDomain?: string;
    theme?: string;
    timezone?: string;
    language?: string;
    emailSettings?: {
        fromEmail?: string;
        fromName?: string;
        smtpHost?: string;
        smtpPort?: number;
        smtpUsername?: string;
        smtpPassword?: string;
        useSsl?: boolean;
    };
}
/**
 * Tenant statistics
 */
export interface TenantStatistics {
    userCount: number;
    activeUserCount: number;
    storageUsed: number;
    lastActivity?: Date;
    createdThisMonth: number;
    loginCount: number;
    apiCallCount: number;
}
/**
 * Create tenant request
 */
export interface CreateTenantRequest {
    name: string;
    displayName: string;
    connectionString?: string;
    isActive?: boolean;
    features?: Omit<TenantFeature, 'displayName'>[];
    settings?: TenantSettings;
    metadata?: Record<string, any>;
}
/**
 * Update tenant request
 */
export interface UpdateTenantRequest {
    id: ID;
    name?: string;
    displayName?: string;
    connectionString?: string;
    isActive?: boolean;
    features?: Omit<TenantFeature, 'displayName'>[];
    settings?: TenantSettings;
    metadata?: Record<string, any>;
}
/**
 * Tenant lookup DTO
 */
export interface TenantLookupDto {
    id: ID;
    name: string;
    displayName: string;
    isActive: boolean;
}
/**
 * Tenant list response
 */
export interface TenantsResponse extends PaginatedResponse<Tenant> {
}
/**
 * Tenant analytics data
 */
export interface TenantAnalytics {
    tenantId: ID;
    period: 'day' | 'week' | 'month' | 'year';
    metrics: {
        userGrowth: Array<{
            date: string;
            count: number;
        }>;
        activeUsers: Array<{
            date: string;
            count: number;
        }>;
        storageUsage: Array<{
            date: string;
            usage: number;
        }>;
        apiCalls: Array<{
            date: string;
            count: number;
        }>;
        revenue?: Array<{
            date: string;
            amount: number;
        }>;
    };
    summary: {
        totalUsers: number;
        activeUsers: number;
        storageUsed: number;
        totalApiCalls: number;
        averageResponseTime: number;
        uptime: number;
    };
}
/**
 * Tenant connection info
 */
export interface TenantConnection {
    tenantId: ID;
    connectionString: string;
    provider: 'sqlserver' | 'postgresql' | 'mysql' | 'sqlite';
    isActive: boolean;
    lastTested?: Date;
    testResult?: {
        success: boolean;
        message?: string;
        responseTime?: number;
    };
}
/**
 * Backup types
 */
export type BackupType = 'full' | 'incremental' | 'differential';
/**
 * Tenant backup info
 */
export interface TenantBackup {
    id: ID;
    tenantId: ID;
    name: string;
    description?: string;
    size: number;
    status: 'pending' | 'in_progress' | 'completed' | 'failed';
    progress?: number;
    createdAt: Date;
    completedAt?: Date;
    downloadUrl?: string;
    error?: string;
    type?: BackupType;
}
/**
 * Tenant restore request
 */
export interface TenantRestoreRequest {
    tenantId: ID;
    backupId: ID;
    restoreData?: boolean;
    restoreSettings?: boolean;
    restoreUsers?: boolean;
}
/**
 * Available tenant features
 */
export interface AvailableFeature {
    name: string;
    displayName: string;
    description: string;
    category: string;
    defaultValue?: any;
    valueType: 'boolean' | 'number' | 'string' | 'object';
    isRequired: boolean;
    dependencies?: string[];
}
/**
 * Tenant context for multi-tenancy
 */
export interface TenantContext {
    currentTenant?: Tenant;
    availableTenants: TenantLookupDto[];
    isLoading: boolean;
    switchTenant: (tenantId: ID) => Promise<void>;
    refreshTenants: () => Promise<void>;
}
/**
 * Tenant list props
 */
export interface TenantListProps {
    onTenantSelect?: (tenant: Tenant) => void;
    onTenantEdit?: (tenant: Tenant) => void;
    onTenantDelete?: (tenant: Tenant) => void;
    showActions?: boolean;
    selectable?: boolean;
    className?: string;
}
/**
 * Tenant form props
 */
export interface TenantFormProps {
    tenant?: Tenant;
    onSubmit?: (tenant: CreateTenantRequest | UpdateTenantRequest) => void;
    onCancel?: () => void;
    loading?: boolean;
    className?: string;
}
/**
 * Tenant detail props
 */
export interface TenantDetailProps {
    tenantId: ID;
    onEdit?: (tenant: Tenant) => void;
    onDelete?: (tenant: Tenant) => void;
    className?: string;
}
/**
 * Tenant switcher props
 */
export interface TenantSwitcherProps {
    placement?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
    showSearch?: boolean;
    showCreateButton?: boolean;
    onTenantCreate?: () => void;
    className?: string;
}
/**
 * Tenant feature manager props
 */
export interface TenantFeatureManagerProps {
    tenantId: ID;
    onFeatureUpdate?: (feature: TenantFeature) => void;
    className?: string;
}
/**
 * Tenant analytics props
 */
export interface TenantAnalyticsProps {
    tenantId: ID;
    period?: 'day' | 'week' | 'month' | 'year';
    className?: string;
}
/**
 * Tenant backup manager props
 */
export interface TenantBackupManagerProps {
    tenantId: ID;
    onBackupCreate?: () => void;
    onBackupRestore?: (backup: TenantBackup) => void;
    className?: string;
}
//# sourceMappingURL=index.d.ts.map