import { RedisClient } from '../data/reportDataStore.js';
import { MigrationServiceConfig } from '../data/types.d.js';

/**
 * One-off migration that updates report IDs stored in Redis
 * from: abc123
 * to: dpr_abc123
 *
 * The migration is idempotent and will only be marked as complete once
 * all user configs have been successfully processed.
 */
declare class ReportIdMigrationService {
    private readonly redisClient;
    enabled: boolean;
    private static readonly MIGRATION_KEY;
    private static readonly USER_CONFIG_PREFIX;
    private static readonly MAX_RETRIES;
    constructor(redisClient: RedisClient, migrationServiceConfig?: MigrationServiceConfig | undefined);
    /**
     * Runs the migration.
     */
    migrate(): Promise<void>;
    /**
     * Retries failed migrations up to the configured maximum number
     * of attempts.
     */
    private retryFailedConfigs;
    /**
     * Migrates a single user config and persists it if any report IDs
     * were updated.
     */
    private migrateSingleConfig;
    /**
     * Retrieves every stored report config from Redis together with its
     * associated Redis key.
     */
    private getAllConfigs;
    /**
     * Retrieves all Redis keys containing user report store data.
     */
    private getUserConfigKeys;
    /**
     * Updates all report IDs in a user config and returns the updated
     * config along with whether any changes were made.
     */
    private migrateConfig;
    /**
     * Updates report IDs in a collection and returns the updated
     * collection together with whether any items changed.
     */
    private updateReportIds;
    /**
     * Converts a legacy report ID into the new DPR-prefixed format.
     *
     * The method is intentionally idempotent so that rerunning the
     * migration will never double-prefix IDs.
     */
    private getMigratedReportId;
    private ensureConnected;
}

export { ReportIdMigrationService };
