/**
 * 리뷰 대상 PR을 적재/소비하는 동시성 안전 큐를 정의하는 파일이다.
 * 같은 PR(URL)이 대기 중이거나 처리 중이면 중복 적재되지 않도록 추적한다.
 */
import type { ReviewTask } from '../domain/types';
/** 현재 처리 중인 작업의 진행 정보다. */
export interface InFlightInfo {
    /** PR 웹 URL */
    url: string;
    /** PR 번호 */
    prNumber: number;
    /** 처리 시작 후 경과 시간(ms) */
    elapsedMs: number;
}
/**
 * 리뷰 작업 큐다. 생산자(폴링)가 적재하고 다수 워커가 동시에 소비한다.
 * URL 기준 dedup으로 대기/진행 중인 PR의 재적재를 막는다.
 */
export declare class ReviewQueue {
    /** 처리 대기 중인 작업 목록 */
    private readonly pending;
    /** 대기 또는 진행 중인 PR URL 집합 (중복 적재 차단용) */
    private readonly tracked;
    /** 진행 중인 작업의 시작 시각 맵 (URL → epoch ms) */
    private readonly inFlightStartedAt;
    /** 진행 중인 작업의 PR 번호 맵 (하트비트 표시용) */
    private readonly inFlightPrNumber;
    /**
     * @description 작업을 큐에 적재한다. 이미 대기/진행 중인 PR이면 적재하지 않는다.
     * @param task 적재할 리뷰 작업
     * @returns 새로 적재되면 true, 중복이면 false
     */
    enqueue(task: ReviewTask): boolean;
    /**
     * @description 대기 중인 작업을 하나 꺼내 진행 중 상태로 표시한다.
     * @param now 현재 시각(epoch ms). 진행 경과시간 계산 기준이다.
     * @returns 꺼낸 작업. 비어 있으면 undefined
     */
    dequeue(now: number): ReviewTask | undefined;
    /**
     * @description 작업 처리 완료를 표시해 추적/진행 상태에서 제거한다.
     * @param url 완료된 PR URL
     */
    markDone(url: string): void;
    /**
     * @description 해당 PR이 대기 또는 진행 중으로 추적되고 있는지 확인한다.
     * @param url 확인할 PR URL
     * @returns 추적 중이면 true
     */
    isTracked(url: string): boolean;
    /** 대기 중 작업 수다. */
    get pendingCount(): number;
    /** 진행 중 작업 수다. */
    get inFlightCount(): number;
    /**
     * @description 진행 중 작업들의 경과시간 스냅샷을 반환한다. (하트비트 표시용)
     * @param now 현재 시각(epoch ms)
     * @returns 진행 중 작업 정보 목록
     */
    getInFlight(now: number): InFlightInfo[];
}
//# sourceMappingURL=review-queue.d.ts.map