export interface Worker {
  worker_id: string
  status: string
  provider: string
  gpu_type: string
  config_json: string | Record<string, unknown>
  started_at: string
  last_heartbeat_at: string
  total_segments_sent: number
  total_segments_completed: number
  total_segments_failed: number
  total_segments_429: number
  total_cache_hits: number
  batches_completed: number
  avg_batch_latency_ms: number
  current_video_id: string | null
  segments_remaining: number
  active_rpm: number
  active_tpm: number
  total_input_tokens: number
  total_output_tokens: number
  total_cached_tokens: number
  last_error?: string
}

export interface QueueStats {
  total: number
  pending: number
  claimed: number
  done: number
  failed: number
  languages: Record<string, { total: number; done: number; pending: number; claimed: number; failed: number }>
}

export interface AggregateStats {
  queue: QueueStats
  workers: {
    total: number
    alive: number
    online: number
    offline: number
    error: number
    ghost: number
    totalSegmentsSent: number
    totalSegmentsCompleted: number
    totalSegmentsFailed: number
    totalSegments429: number
    totalCacheHits: number
    totalBatches: number
    totalInputTokens: number
    totalOutputTokens: number
    totalCachedTokens: number
    aggregateRpm: number
    aggregateTpm: number
    avgBatchLatency: number
  }
  transcriptions: {
    total: number
    avgQuality: number
    langMismatches: number
    asrEligible: number
    ttsCleanEligible: number
    ttsExpressiveEligible: number
  }
  flags: {
    total: number
    byType: Record<string, number>
  }
  eta: {
    windows: {
      w5:  { videos: number; segments: number; videosPerMin: number; segmentsPerMin: number }
      w15: { videos: number; segments: number; videosPerMin: number; segmentsPerMin: number }
      w60: { videos: number; segments: number; videosPerMin: number; segmentsPerMin: number }
    }
    blendedVideosPerMin: number
    blendedSegmentsPerMin: number
    estimatedMinutesRemaining: number
    estimatedHoursRemaining: number
  }
}
