/**
 * 일반 상태 문자열 → BadgeIntent 매핑 유틸
 *
 * 정식 카탈로그에 없는 ad-hoc 상태 문자열(한글/영문 섞여 있는 mock 데이터 등)을
 * 임시로 intent에 매핑. 프로젝트 전역에서 재사용 가능.
 *
 * 원칙:
 * - 가능하면 전용 카탈로그를 만들어 사용하는 것이 우선
 * - 이 유틸은 정형화되지 않은 데모/mock 데이터 대응 임시 매핑용
 *
 * 사용:
 *   <Badge intent={getStatusIntent(s)} size="xs">{s}</Badge>
 */

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

const STATUS_INTENT_MAP: Record<string, BadgeIntent> = {
  // 정상/긍정
  '정상': 'success',
  '운영': 'success',
  '운영중': 'success',
  '활성': 'success',
  '완료': 'success',
  '확정': 'success',
  '가용': 'success',
  '승인': 'success',
  '성공': 'success',
  '통과': 'success',
  '배포': 'success',
  '허용': 'success',
  active: 'success',
  running: 'info',
  online: 'success',
  healthy: 'success',
  success: 'success',
  ok: 'success',
  passed: 'success',
  deployed: 'success',
  confirmed: 'success',
  CONFIRMED: 'success',
  ACTIVE: 'success',
  PASSED: 'success',
  RUNNING: 'info',
  DEPLOYED: 'success',

  // 정보/대기
  '대기': 'info',
  '계획': 'info',
  '계획중': 'info',
  '진행': 'info',
  '진행중': 'info',
  '처리': 'info',
  '처리중': 'info',
  '생성': 'info',
  '예약': 'info',
  '예정': 'info',
  '테스트': 'info',
  pending: 'info',
  PENDING: 'info',
  planning: 'info',
  PLANNING: 'info',
  PLANNED: 'info',
  scheduled: 'info',
  testing: 'info',
  TESTING: 'info',
  STAGING: 'info',
  CANARY: 'info',

  // 주의
  '주의': 'warning',
  '경고': 'warning',
  '검토': 'warning',
  '검토필요': 'warning',
  '수정': 'warning',
  '변경': 'warning',
  '점검': 'warning',
  '중지': 'warning',
  warning: 'warning',
  WARNING: 'warning',
  review: 'warning',
  reviewing: 'warning',
  maintenance: 'warning',

  // 심각/에러
  '긴급': 'critical',
  '오류': 'critical',
  '실패': 'critical',
  '에러': 'critical',
  '차단': 'critical',
  '정지': 'critical',
  '거부': 'critical',
  '폐기': 'critical',
  '위험': 'critical',
  '만료': 'critical',
  critical: 'critical',
  CRITICAL: 'critical',
  error: 'critical',
  ERROR: 'critical',
  failed: 'critical',
  FAILED: 'critical',
  blocked: 'critical',
  rejected: 'critical',
  REJECTED: 'critical',
  expired: 'critical',
  EXPIRED: 'critical',

  // 높음
  '높음': 'high',
  '높은': 'high',
  '관리자': 'high',
  high: 'high',
  HIGH: 'high',

  // 보라/특수
  '분석': 'purple',
  '학습': 'purple',
  '추론': 'purple',
  '실행': 'purple',
  '배포중': 'purple',
  analyzing: 'purple',
  training: 'purple',

  // 청록/모니터링
  '모니터': 'cyan',
  '모니터링': 'cyan',
  '감시': 'cyan',
  '추적': 'cyan',
  '추적중': 'cyan',
  monitoring: 'cyan',
  tracking: 'cyan',

  // 비활성/중립
  '비활성': 'muted',
  '미배포': 'muted',
  '없음': 'muted',
  '-': 'muted',
  '기타': 'muted',
  '오탐': 'muted',
  inactive: 'muted',
  INACTIVE: 'muted',
  disabled: 'muted',
  DISABLED: 'muted',
  none: 'muted',
  unknown: 'muted',
  UNKNOWN: 'muted',
  ARCHIVED: 'muted',
  DEV: 'muted',
};

/**
 * 상태 문자열을 BadgeIntent로 변환.
 * 매핑 없으면 'muted' 반환.
 */
export function getStatusIntent(status: string | null | undefined): BadgeIntent {
  if (!status) return 'muted';
  return STATUS_INTENT_MAP[status] ?? STATUS_INTENT_MAP[status.toLowerCase()] ?? 'muted';
}

/**
 * 숫자 위험도(0-100)를 intent로 매핑.
 * 80 이상 critical, 60 이상 high, 40 이상 warning, 아니면 info
 */
export function getRiskIntent(score: number): BadgeIntent {
  if (score >= 80) return 'critical';
  if (score >= 60) return 'high';
  if (score >= 40) return 'warning';
  return 'info';
}
