/**
 * GET /api/queue/overview 응답 타입.
 *
 * Backend 는 병렬 트랙에서 구현 중 — 계약 고정 (feat/ds-processing-board).
 * 필드 변경 시 양쪽 동시 수정 필수.
 */

export type MachineKey = 'gpu' | 'macmini' | 'macbook';

/** 머신 상태 — active(가동) / deferred(보류) / idle(대기) */
export type MachineState = 'active' | 'deferred' | 'idle';

/** 머신이 지금 처리 중인 문서 1건 */
export interface MachineCurrentItem {
  document_id: number;
  title: string;
  stage: string;
}

export interface MachineOverview {
  key: MachineKey;
  label: string;
  state: MachineState;
  /** 담당 단계 키 목록 (extract/classify/... — 홈 STAGE_LABEL 로 한글화) */
  stages: string[];
  pending: number;
  processing: number;
  failed: number;
  /** 최근 1시간 완료 건수 (처리율 N/h 표기) */
  done_1h: number;
  done_today: number;
  /** 보류 건수 — 맥북 sleep 등으로 자동 재개 대기 중 */
  deferred_pending: number;
  current: MachineCurrentItem[];
}

/** 요약 백로그 ETA (안5 라이트) — 추정치, 유입 변동 시 오차 */
export interface SummarizeEta {
  pending: number;
  done_rate_1h: number;
  inflow_rate_1h: number;
  /** null = 유입이 소화를 앞섬 (백필 중) — 소진 예상 불가 */
  eta_minutes: number | null;
}

/** 시간당 유입 vs 소화 (이번 트랙 미렌더 — 후속 추세 위젯 슬롯) */
export interface TrendPoint {
  hour: string;
  inflow: number;
  done: number;
}

export interface QueueTotals {
  pending: number;
  processing: number;
  failed: number;
}

export interface QueueStageRow {
  stage: string;
  pending: number;
  processing: number;
  failed: number;
  done_today: number;
  oldest_pending_age_sec: number | null;
}

export interface QueueOverview {
  machines: MachineOverview[];
  summarize_eta: SummarizeEta;
  trend_24h: TrendPoint[];
  stages: QueueStageRow[];
  totals: QueueTotals;
}
