import { RedisClientType } from 'redis';
import { SegmentClaim } from './interfaces';
/**
 * Manages distributed segment claims using Redis
 * Ensures only one worker processes each segment at a time
 */
export declare class RedisSegmentClaimManager {
    private readonly redis;
    private readonly workerId;
    private readonly defaultTTL;
    private readonly lockPrefix;
    private readonly statusPrefix;
    private readonly completedPrefix;
    private readonly completedSegmentTTL;
    constructor(redis: RedisClientType, workerId: string, defaultTTL?: number, // 60 seconds
    completedSegmentTTL?: number);
    /**
     * Try to claim a segment for processing
     */
    claimSegment(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number, outputPath?: string): Promise<SegmentClaim>;
    /**
     * Check if a segment is already completed
     */
    isSegmentCompleted(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<boolean>;
    /**
     * Mark a segment as completed
     */
    markSegmentCompleted(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<void>;
    /**
     * Get the status of a segment
     */
    getSegmentStatus(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<string | null>;
    /**
     * Publish segment completion event
     */
    publishSegmentComplete(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<void>;
    private createCompletionChannel;
    private handleCompletionMessage;
    private createUnsubscribeFunction;
    private connectSubscriber;
    private subscribeToChannel;
    private disconnectSubscriber;
    /**
     * Subscribe to segment completion events
     */
    subscribeToSegmentComplete(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number, callback: () => void): Promise<() => Promise<void>>;
    private getSegmentKey;
    private createFailedClaim;
    private createSuccessfulClaim;
    private scanForLockKeys;
    private scanForLockKeysTask;
    private getLockValues;
    private parseLockValue;
    private processClaims;
    /**
     * Get all currently claimed segments with their metadata
     * Used for work stealing detection
     */
    getClaimedSegments(): Promise<Array<{
        segmentKey: string;
        workerId: string;
        claimTime: number;
        expiresAt: number;
        outputPath: string;
    }>>;
    private buildForceClaimScript;
    private buildLockKey;
    private buildCompletedKey;
    private executeForceClaimScript;
    /**
     * Force claim a segment, overriding existing claims
     * Used for work stealing when a worker is unresponsive
     */
    forceClaimSegment(segmentKey: string, newWorkerId: string, outputPath?: string): Promise<boolean>;
    /**
     * Parse a segment key to extract its components
     */
    parseSegmentKey(segmentKey: string): {
        fileId: string;
        streamType: string;
        quality: string;
        streamIndex: number;
        segmentIndex: number;
    } | null;
    private isValidWorkerId;
    private validateAndSanitizeOutputPath;
}
//# sourceMappingURL=redisSegmentClaimManager.d.ts.map