import type { ControlPlaneStore } from '../control-plane';
import type { BackupCoverage, BackupDestination, BackupJob, BackupPolicy, RecoveryPoint } from './model';
export declare function validateBackupDestination(input: Omit<BackupDestination, 'id' | 'version' | 'createdAt' | 'updatedAt'>): void;
export declare class BackupStore {
    readonly controlPlane: ControlPlaneStore;
    private readonly now;
    constructor(controlPlane: ControlPlaneStore, now?: () => Date);
    createDestination(input: Omit<BackupDestination, 'id' | 'version' | 'createdAt' | 'updatedAt'>): BackupDestination;
    getDestination(id: string): BackupDestination | undefined;
    listDestinations(projectId: string): BackupDestination[];
    recordDestinationTest(id: string, result: {
        ok: boolean;
        error?: string;
    }): BackupDestination;
    createPolicy(input: Omit<BackupPolicy, 'id' | 'version' | 'createdAt' | 'updatedAt' | 'nextRunAt'>): BackupPolicy;
    getPolicy(id: string): BackupPolicy | undefined;
    listPolicies(projectId: string, environmentId?: string): BackupPolicy[];
    duePolicies(at?: Date): BackupPolicy[];
    advancePolicy(id: string, scheduledFor: string): BackupPolicy;
    createJob(input: Omit<BackupJob, 'id' | 'createdAt' | 'updatedAt'>): BackupJob;
    getJob(id: string): BackupJob | undefined;
    listJobs(projectId: string): BackupJob[];
    updateJob(id: string, patch: Partial<Pick<BackupJob, 'status' | 'operationId' | 'recoveryPointId' | 'progress' | 'healthResult' | 'error' | 'startedAt' | 'finishedAt' | 'safetyBackupId'>>): BackupJob;
    createRecoveryPoint(input: Omit<RecoveryPoint, 'id' | 'createdAt' | 'updatedAt'>): RecoveryPoint;
    getRecoveryPoint(id: string): RecoveryPoint | undefined;
    listRecoveryPoints(projectId: string, policyId?: string): RecoveryPoint[];
    updateRecoveryPoint(id: string, patch: Partial<Pick<RecoveryPoint, 'status' | 'verificationState' | 'verifiedAt' | 'held' | 'pinned' | 'manifest' | 'durationMs'>>): RecoveryPoint;
    retentionCandidates(at?: Date): RecoveryPoint[];
    coverage(projectId: string, at?: Date): BackupCoverage[];
}
