/**
 * 성능/시스템 상태 공통 카탈로그 (admin 성능·데이터 보관·모델 검증 페이지 공유)
 *
 * status 문자열 → BadgeIntent + 아이콘 hex.
 * 인라인 hex/하드코딩 Tailwind 색상을 이 카탈로그로 치환한다.
 *
 * 사용처:
 *   - PerformanceMonitoring (KPI 카드, SLO 대시보드)
 *   - DataRetentionPolicy (정책 활성/보관 상태)
 *   - DataModelVerification (검증 passed/failed/running)
 */

import type { BadgeIntent } from '@lib/theme/variants';

export type PerformanceStatus =
  | 'good'       // 정상/양호
  | 'normal'     // 일반 (기본)
  | 'warning'    // 주의
  | 'critical'   // 심각/경보
  | 'running'    // 실행 중
  | 'passed'     // 통과
  | 'failed'     // 실패
  | 'active'     // 활성
  | 'scheduled'  // 예약
  | 'archived';  // 보관

export interface PerformanceStatusMeta {
  intent: BadgeIntent;
  /** 아이콘·바 차트용 hex (동적 데이터 기반 예외 허용) */
  hex: string;
  label: { ko: string; en: string };
}

export const PERFORMANCE_STATUS_META: Record<PerformanceStatus, PerformanceStatusMeta> = {
  good:      { intent: 'success', hex: '#10b981', label: { ko: '양호', en: 'Good' } },
  normal:    { intent: 'info',    hex: '#3b82f6', label: { ko: '정상', en: 'Normal' } },
  warning:   { intent: 'warning', hex: '#f59e0b', label: { ko: '주의', en: 'Warning' } },
  critical:  { intent: 'critical', hex: '#ef4444', label: { ko: '심각', en: 'Critical' } },
  running:   { intent: 'info',    hex: '#06b6d4', label: { ko: '실행 중', en: 'Running' } },
  passed:    { intent: 'success', hex: '#10b981', label: { ko: '통과', en: 'Passed' } },
  failed:    { intent: 'critical', hex: '#ef4444', label: { ko: '실패', en: 'Failed' } },
  active:    { intent: 'success', hex: '#10b981', label: { ko: '활성', en: 'Active' } },
  scheduled: { intent: 'info',    hex: '#8b5cf6', label: { ko: '예약', en: 'Scheduled' } },
  archived:  { intent: 'muted', hex: '#6b7280', label: { ko: '보관', en: 'Archived' } },
};

/** 사용률(0~1) → 상태 분류 (KPI 게이지 바 등) */
export function utilizationStatus(ratio: number): PerformanceStatus {
  if (ratio < 0.6) return 'good';
  if (ratio < 0.8) return 'warning';
  return 'critical';
}

export function getPerformanceStatusMeta(status: PerformanceStatus): PerformanceStatusMeta {
  return PERFORMANCE_STATUS_META[status] ?? PERFORMANCE_STATUS_META.normal;
}

export function getPerformanceStatusIntent(status: PerformanceStatus): BadgeIntent {
  return getPerformanceStatusMeta(status).intent;
}

export function getPerformanceStatusHex(status: PerformanceStatus): string {
  return getPerformanceStatusMeta(status).hex;
}
