/**
 * 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 소화 (요약 24h 추이) */
export interface TrendPoint {
  hour: string;
  inflow: number;
  done: number;
}

/** summarize 머신별 완료 실적 분담 (오프로드 가시화 — ds-board-merged A-1) */
export interface SummarizeByMachine {
  macmini: { done_1h: number; done_today: number };
  macbook: { done_1h: number; done_today: number };
}

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

export interface QueueStageRow {
  stage: string;
  pending: number;
  processing: number;
  failed: number;
  /** 최근 1시간 완료 — 노드 처리율·ETA 재료 (ds-board-engines-1) */
  done_1h: number;
  /** 최근 1시간 유입 — 유입 우세 판정 재료 (ds-board-engines-1) */
  created_1h: number;
  done_today: number;
  oldest_pending_age_sec: number | null;
}

/** 큐 밖 관리 스크립트(백필 등) 작업 — processing_queue 가 못 보는 사각지대.
 *  stale = running 인데 heartbeat 끊김(프로세스 사망 추정). */
export interface BackgroundJob {
  id: number;
  kind: string;
  label: string | null;
  state: 'running' | 'done' | 'failed';
  machine: string;
  processed: number;
  total: number | null;
  elapsed_sec: number;
  stale: boolean;
  error: string | null;
}

export interface QueueOverview {
  machines: MachineOverview[];
  summarize_eta: SummarizeEta;
  summarize_by_machine: SummarizeByMachine;
  trend_24h: TrendPoint[];
  stages: QueueStageRow[];
  totals: QueueTotals;
  background_jobs?: BackgroundJob[];
}

/** ─── 실패 처리 (ds-board-engines-1) — GET /api/queue/failed · POST /retry|/skip ─── */

export interface FailedItem {
  id: number;
  stage: string;
  document_id: number;
  title: string;
  attempts: number;
  max_attempts: number;
  error_message: string | null;
  failed_at: string | null;
}

export interface FailedListResponse {
  items: FailedItem[];
  total: number;
}

export interface RetryResponse {
  requested: number;
  retried: number;
  not_retried: number;
}

export interface SkipResponse {
  requested: number;
  skipped: number;
  not_skipped: number;
}
