/**
 * 형질(Trait) 관련 상수 정의
 *
 * @description
 * 유전체 분석에서 사용하는 35개 형질 목록
 */

/** 성장형질 (1개) */
export const GROWTH_TRAITS = ['12개월령체중'] as const;

/** 경제형질 (4개) - 생산 카테고리 */
export const ECONOMIC_TRAITS = ['도체중', '등심단면적', '등지방두께', '근내지방도'] as const;

/** 체형형질 (10개) */
export const BODY_TRAITS = [
  '체고', '십자', '체장', '흉심', '흉폭',
  '고장', '요각폭', '좌골폭', '곤폭', '흉위',
] as const;

/** 부위별 무게 (10개) */
export const WEIGHT_TRAITS = [
  '안심weight', '등심weight', '채끝weight', '목심weight', '앞다리weight',
  '우둔weight', '설도weight', '사태weight', '양지weight', '갈비weight',
] as const;

/** 부위별 비율 (10개) */
export const RATE_TRAITS = [
  '안심rate', '등심rate', '채끝rate', '목심rate', '앞다리rate',
  '우둔rate', '설도rate', '사태rate', '양지rate', '갈비rate',
] as const;

/** 전체 형질 (35개) */
export const ALL_TRAITS = [
  ...GROWTH_TRAITS,
  ...ECONOMIC_TRAITS,
  ...BODY_TRAITS,
  ...WEIGHT_TRAITS,
  ...RATE_TRAITS,
] as const;

/** 낮을수록 좋은 형질 (부호 반전 필요) */
export const NEGATIVE_TRAITS: string[] = ['등지방두께'];

/** 형질 타입 */
export type TraitName = typeof ALL_TRAITS[number];

/** 카테고리 타입 */
export type TraitCategory = '성장' | '생산' | '체형' | '무게' | '비율';

/**
 * 형질별 카테고리 매핑
 * - 형질명 → 카테고리 조회용
 */
export const TRAIT_CATEGORY_MAP: Record<string, TraitCategory> = {
  // 성장 카테고리 - 월령별 체중
  '12개월령체중': '성장',

  // 생산 카테고리 - 도체(도축 후 고기) 품질
  '도체중': '생산',
  '등심단면적': '생산',
  '등지방두께': '생산',
  '근내지방도': '생산',

  // 체형 카테고리 - 신체 구조
  '체고': '체형',
  '십자': '체형',
  '체장': '체형',
  '흉심': '체형',
  '흉폭': '체형',
  '고장': '체형',
  '요각폭': '체형',
  '좌골폭': '체형',
  '곤폭': '체형',
  '흉위': '체형',

  // 무게 카테고리 - 부위별 실제 무게 (kg)
  '안심weight': '무게',
  '등심weight': '무게',
  '채끝weight': '무게',
  '목심weight': '무게',
  '앞다리weight': '무게',
  '우둔weight': '무게',
  '설도weight': '무게',
  '사태weight': '무게',
  '양지weight': '무게',
  '갈비weight': '무게',

  // 비율 카테고리 - 부위별 비율 (%)
  '안심rate': '비율',
  '등심rate': '비율',
  '채끝rate': '비율',
  '목심rate': '비율',
  '앞다리rate': '비율',
  '우둔rate': '비율',
  '설도rate': '비율',
  '사태rate': '비율',
  '양지rate': '비율',
  '갈비rate': '비율',
};

/**
 * 형질명으로 카테고리 조회
 *
 * @param traitName - 형질명
 * @returns 카테고리명 (없으면 '기타')
 */
export function getTraitCategory(traitName: string): string {
  return TRAIT_CATEGORY_MAP[traitName] ?? '기타';
}
