import { ApiClient } from './api-client';
export interface BackupDestination {
    id: string;
    name: string;
    provider: string;
    endpoint: string;
    region: string;
    bucket: string;
    pathPrefix?: string;
    encryptionMode?: string;
    forcePathStyle?: boolean;
    useSse?: boolean;
    usableForEtcdL1?: boolean;
    costPerGbMonthCents?: number;
    health?: string;
    usageBytes?: number;
    createdAt?: string;
    updatedAt?: string;
}
export interface CreateBackupDestinationInput {
    name: string;
    provider: 'hetzner_object_storage' | 'scaleway_object_storage' | 'minio' | 'generic_s3';
    endpoint: string;
    region: string;
    bucket: string;
    pathPrefix?: string;
    accessKey: string;
    secretKey: string;
    encryptionMode?: 'flui_managed' | 'byo_passphrase' | 'none';
    encryptionPassphrase?: string;
    forcePathStyle?: boolean;
    useSse?: boolean;
    usableForEtcdL1?: boolean;
    costPerGbMonthCents?: number;
}
export interface BackupPolicy {
    id: string;
    name: string;
    clusterId: string;
    scope: string;
    profile: string;
    enabled?: boolean;
    schedule?: string;
    retentionDays?: number;
    destinations?: Array<{
        destinationId: string;
        role: string;
        priority?: number;
    }>;
    createdAt?: string;
    updatedAt?: string;
}
export interface CreatePolicyInput {
    name: string;
    clusterId: string;
    scope: string;
    profile: string;
    schedule?: string;
    retentionDays?: number;
    retentionMaxCopies?: number;
    enabled?: boolean;
    destinations: Array<{
        destinationId: string;
        role: 'primary' | 'replica';
        priority?: number;
    }>;
    scopeSelector?: Record<string, any>;
}
export interface BackupJob {
    id: string;
    policyId: string;
    status: string;
    startedAt?: string;
    completedAt?: string;
    bytesTransferred?: number;
    errorMessage?: string;
}
export interface RestoreJob {
    id: string;
    status: string;
    artifactId: string;
    sourceDestinationId: string;
    targetClusterId: string;
    targetKind: string;
    strategy?: string;
    startedAt?: string;
    completedAt?: string;
    errorMessage?: string;
}
export declare class BackupClient {
    private readonly api;
    constructor(api: ApiClient);
    static fromConfig(): BackupClient;
    listDestinations(): Promise<BackupDestination[]>;
    getDestination(id: string): Promise<BackupDestination>;
    createDestination(input: CreateBackupDestinationInput): Promise<BackupDestination>;
    testDestination(id: string): Promise<{
        healthy: boolean;
        error?: string;
    }>;
    refreshDestinationUsage(id: string): Promise<{
        ok: boolean;
    }>;
    deleteDestination(id: string): Promise<{
        ok: boolean;
    }>;
    listPolicies(): Promise<BackupPolicy[]>;
    listPoliciesForCluster(clusterId: string): Promise<BackupPolicy[]>;
    getPolicy(id: string): Promise<BackupPolicy>;
    createPolicy(input: CreatePolicyInput): Promise<BackupPolicy>;
    deletePolicy(id: string): Promise<{
        ok: boolean;
    }>;
    runJobForPolicy(policyId: string): Promise<BackupJob>;
    getJob(id: string): Promise<BackupJob>;
    listJobsForCluster(clusterId: string): Promise<BackupJob[]>;
    previewRestore(input: {
        artifactId: string;
        sourceDestinationId: string;
    }): Promise<Record<string, any>>;
    createRestore(input: {
        artifactId: string;
        sourceDestinationId: string;
        targetClusterId: string;
        targetKind: string;
        targetSelector?: Record<string, any>;
        strategy?: string;
    }): Promise<RestoreJob>;
    listRestores(): Promise<RestoreJob[]>;
    getRestore(id: string): Promise<RestoreJob>;
}
