import { type RetentionEnforcer, type EnforcementOptions } from './retention-enforcer.js';
import type { RetentionReport, RetentionComplianceStatus } from './retention-policy.js';
/**
 * Scheduler configuration
 */
export interface RetentionSchedulerConfig {
    /** Enable/disable the scheduler */
    enabled: boolean;
    /** Cron expression for daily enforcement (default: 2 AM) */
    enforcementCron: string;
    /** Cron expression for weekly compliance report (default: Sunday 3 AM) */
    reportCron: string;
    /** Batch size for enforcement operations */
    batchSize: number;
    /** Alert callback for enforcement failures */
    onEnforcementFailure?: (report: RetentionReport, errors: string[]) => Promise<void>;
    /** Alert callback for compliance issues */
    onComplianceIssue?: (status: RetentionComplianceStatus) => Promise<void>;
    /** Report generation callback */
    onReportGenerated?: (report: RetentionReport) => Promise<void>;
}
/**
 * Default scheduler configuration
 */
export declare const DEFAULT_SCHEDULER_CONFIG: RetentionSchedulerConfig;
/**
 * Scheduler status
 */
export interface RetentionSchedulerStatus {
    isLeader: boolean;
    instanceId: string | null;
    enabled: boolean;
    tasks: Array<{
        name: string;
        cronExpression: string;
        running: boolean;
    }>;
    lastEnforcementRun?: string;
    lastReportRun?: string;
    nextEnforcementRun?: string;
    nextReportRun?: string;
}
/**
 * Scheduler for retention policy enforcement
 */
export declare class RetentionScheduler {
    private config;
    private enforcer;
    private leaderElection;
    private scheduledTasks;
    private lastEnforcementRun?;
    private lastReportRun?;
    private started;
    constructor(config?: Partial<RetentionSchedulerConfig>, enforcer?: RetentionEnforcer);
    /**
     * Start the scheduler
     */
    start(): Promise<void>;
    /**
     * Stop the scheduler
     */
    stop(): Promise<void>;
    /**
     * Get scheduler status
     */
    getStatus(): RetentionSchedulerStatus;
    /**
     * Run enforcement immediately (for manual trigger or testing)
     */
    runEnforcementNow(options?: EnforcementOptions): Promise<RetentionReport>;
    /**
     * Generate compliance report immediately (for manual trigger or testing)
     */
    generateComplianceReportNow(): Promise<RetentionComplianceStatus>;
    /**
     * Create scheduled tasks
     */
    private createScheduledTasks;
    /**
     * Start all tasks
     */
    private startTasks;
    /**
     * Stop all tasks
     */
    private stopTasks;
    /**
     * Get the next run time for a cron expression
     */
    private getNextRunTime;
}
/**
 * Get or create the retention scheduler singleton
 */
export declare function getRetentionScheduler(config?: Partial<RetentionSchedulerConfig>, enforcer?: RetentionEnforcer): RetentionScheduler;
/**
 * Create a new retention scheduler instance
 */
export declare function createRetentionScheduler(config?: Partial<RetentionSchedulerConfig>, enforcer?: RetentionEnforcer): RetentionScheduler;
/**
 * Reset the retention scheduler singleton (for testing)
 */
export declare function resetRetentionScheduler(): void;
/**
 * Start the global retention scheduler
 */
export declare function startRetentionScheduler(config?: Partial<RetentionSchedulerConfig>): Promise<void>;
/**
 * Stop the global retention scheduler
 */
export declare function stopRetentionScheduler(): Promise<void>;
//# sourceMappingURL=retention-scheduler.d.ts.map