/**
 * 컴포넌트 variant 메타데이터 (Single Source of Truth)
 *
 * variants.ts는 CVA 클래스 문자열만 정의.
 * 여기서는 각 variant의 **의미/사용처/설명**을 중앙 관리하여
 * 쇼케이스와 실 페이지가 일관되게 참조 가능.
 *
 * 예) 쇼케이스 BadgeSection의 "intent 의미 가이드"가 이 파일을 참조.
 *     코드 리뷰 시 variant 선택 기준이 이 파일에서 단일하게 유지됨.
 */

import type { BadgeIntent, BadgeSize, ButtonVariant, ButtonSize } from './variants';

export interface VariantMeta<K extends string> {
  key: K;
  titleKo: string;
  titleEn: string;
  description: string;
}

// ── Badge intent 의미 ──────────────────────────
export const BADGE_INTENT_META: Record<BadgeIntent, VariantMeta<BadgeIntent>> = {
  critical: {
    key: 'critical',
    titleKo: '심각',
    titleEn: 'Critical',
    description: '심각 · 긴급 · 위험 (빨강 계열)',
  },
  high: {
    key: 'high',
    titleKo: '높음',
    titleEn: 'High',
    description: '높음 · 경고 (주황 계열)',
  },
  warning: {
    key: 'warning',
    titleKo: '주의',
    titleEn: 'Warning',
    description: '주의 · 보류 (노랑 계열)',
  },
  info: {
    key: 'info',
    titleKo: '정보',
    titleEn: 'Info',
    description: '일반 · 정보 (파랑 계열, 기본값)',
  },
  success: {
    key: 'success',
    titleKo: '성공',
    titleEn: 'Success',
    description: '성공 · 완료 · 정상 (초록 계열)',
  },
  muted: {
    key: 'muted',
    titleKo: '중립',
    titleEn: 'Muted',
    description: '비활성 · 중립 · 기타 (회색 계열)',
  },
  purple: {
    key: 'purple',
    titleKo: '분석',
    titleEn: 'Purple',
    description: '분석 · AI · 특수 (보라 계열)',
  },
  cyan: {
    key: 'cyan',
    titleKo: '모니터',
    titleEn: 'Cyan',
    description: '모니터링 · 스트림 (청록 계열)',
  },
};

export const BADGE_INTENT_ORDER: BadgeIntent[] = [
  'critical',
  'high',
  'warning',
  'info',
  'success',
  'muted',
  'purple',
  'cyan',
];

export const BADGE_SIZE_ORDER: BadgeSize[] = ['xs', 'sm', 'md', 'lg'];

// ── Button variant 의미 ────────────────────────
export const BUTTON_VARIANT_META: Record<ButtonVariant, VariantMeta<ButtonVariant>> = {
  primary: {
    key: 'primary',
    titleKo: '주요',
    titleEn: 'Primary',
    description: '주요 액션 · 기본 CTA (페이지당 1개 권장)',
  },
  secondary: {
    key: 'secondary',
    titleKo: '보조',
    titleEn: 'Secondary',
    description: '보조 액션 · 툴바 버튼 (기본값)',
  },
  ghost: {
    key: 'ghost',
    titleKo: '고요',
    titleEn: 'Ghost',
    description: '고요한 액션 · 리스트 행 내부',
  },
  outline: {
    key: 'outline',
    titleKo: '윤곽',
    titleEn: 'Outline',
    description: '강조 보조 · 필터 활성화 상태',
  },
  destructive: {
    key: 'destructive',
    titleKo: '위험',
    titleEn: 'Destructive',
    description: '삭제 · 비활성화 등 위험 액션',
  },
};

export const BUTTON_VARIANT_ORDER: ButtonVariant[] = [
  'primary',
  'secondary',
  'ghost',
  'outline',
  'destructive',
];

export const BUTTON_SIZE_ORDER: ButtonSize[] = ['sm', 'md', 'lg'];
