/**
 * 전역 필터 타입 정의 /
 *
 */

/**
 * 분석 지표 (유전자/유전능력)
 */
export type AnalysisIndex = "GENE" | "ABILITY";

/**
 * 유전자 정보
 */
export interface GeneInfo {
  name: string;
  category: "QUANTITY" | "QUALITY";
  description: string;
  importance: number;
}

/**
 * 형질 정보
 */
export interface TraitInfo {
  name: string;
  category: "GROWTH" | "ECONOMIC" | "BODY" | "WEIGHT" | "RATE";
  description: string;
}

/**
 * 전역 필터 설정
 * 사용자가 로그인해서 설정하면 모든 페이지에서 이 필터가 적용됨
 */
export interface GlobalFilterSettings {
  // 분석 지표
  analysisIndex?: AnalysisIndex;

  // 선택된 유전자 목록 (유전자 기반)
  selectedGenes: string[];

  // 고정 유전자 (최대 5개, 항상 맨 앞 표시)
  pinnedGenes?: string[];

  // 선택된 형질 목록
  selectedTraits?: string[];

  // 고정 형질 (최대 5개, 항상 맨 앞 표시)
  pinnedTraits?: string[];

  // 형질 가중치 (유전체 기반)
  // ======== DB의 trait_nm과 일치해야 함==============
  // JavaScript/TypeScript 문법 규칙 : 
  // "12개월령체중": number;  // 필수 - 숫자로 시작
  // "my-key": number;      // 필수 - 하이픈(특수문자)
  // "my key": number;      // 필수 - 공백 포함

  traitWeights: {
    // 성장형질 (1개)
    "12개월령체중": number; // 따옴표

    // 경제형질 (4개)
    도체중: number;
    등심단면적: number;
    등지방두께: number;
    근내지방도: number;

    // 체형형질 (10개) 
    체고: number;
    십자: number; // 십자부고 → 십자
    체장: number;
    흉심: number;
    흉폭: number;
    고장: number; // 요각장 → 고장
    요각폭: number;
    좌골폭: number;
    곤폭: number; // 좌골단폭 → 곤폭
    흉위: number;

    // 부위별무게 (10개) - DB 형질명과 일치 (무게와 비율은 영문 붙여서 구분)
    안심weight: number;
    등심weight: number;
    채끝weight: number;
    목심weight: number;
    앞다리weight: number;
    우둔weight: number;
    설도weight: number;
    사태weight: number;
    양지weight: number;
    갈비weight: number;

    // 부위별비율 (10개) - DB 형질명과 일치 (무게와 비율은 영문 붙여서 구분)
    안심rate: number;
    등심rate: number;
    채끝rate: number;
    목심rate: number;
    앞다리rate: number;
    우둔rate: number;
    설도rate: number;
    사태rate: number;
    양지rate: number;
    갈비rate: number;
  };

  // 근친도 임계값 (%)
  inbreedingThreshold: number;

  // 필터 활성화 여부
  isActive: boolean;

  // 마지막 업데이트 시간
  updtDt: Date;
}

/**
 * ====================================================================================================
 * 기본 필터 초기값 설정
 * 사용자가 해당 형질 선택하지 않았을때 필터의 초기 값 0 세팅
 * ====================================================================================================
 * const [filterSettings, setFilterSettings] = useState(DEFAULT_FILTER_SETTINGS);
 * function resetFilter() {
    setFilterSettings(DEFAULT_FILTER_SETTINGS);  // 초기화
  }
    if (!user.filterSettings) {
    user.filterSettings = DEFAULT_FILTER_SETTINGS;  // 기본값 적용
  }
 */
export const DEFAULT_FILTER_SETTINGS: GlobalFilterSettings = {
  analysisIndex: "GENE",
  selectedGenes: [],
  pinnedGenes: [],
  selectedTraits: ["도체중", "등심단면적", "등지방두께", "근내지방도", "체장", "체고", "흉위"],
  pinnedTraits: [],
  traitWeights: {
    // 성장형질 (점수: 0 ~ 10)
    "12개월령체중": 0,

    // 경제형질 (점수: 0 ~ 10)
    도체중: 1,
    등심단면적: 1,
    등지방두께: 1,
    근내지방도: 1,

    // 체형형질 (점수: 0 ~ 10) - DB 형질명과 일치
    체고: 1,
    십자: 0,
    체장: 1,
    흉심: 0,
    흉폭: 0,
    고장: 0,
    요각폭: 0,
    좌골폭: 0,
    곤폭: 0,
    흉위: 1,

    // 부위별무게 (점수: 0 ~ 10) - DB 형질명과 일치
    안심weight: 0,
    등심weight: 0,
    채끝weight: 0,
    목심weight: 0,
    앞다리weight: 0,
    우둔weight: 0,
    설도weight: 0,
    사태weight: 0,
    양지weight: 0,
    갈비weight: 0,

    // 부위별비율 (점수: 0 ~ 10) - DB 형질명과 일치
    안심rate: 0,
    등심rate: 0,
    채끝rate: 0,
    목심rate: 0,
    앞다리rate: 0,
    우둔rate: 0,
    설도rate: 0,
    사태rate: 0,
    양지rate: 0,
    갈비rate: 0,
  },
  inbreedingThreshold: 0, // 근친도 기본값 0
  isActive: true, // 기본 7개 형질이 선택되어 있으므로 활성화 
                  // 기본 각각 1점으로 세팅
  updtDt: new Date(),
};

/**
 * 주요 유전자 7개 (육량형 3개 + 육질형 4개)
 * 나머지 유전자는 "전체 보기" 검색 버튼을 통해 선택 가능
 */
export const MAJOR_GENES: GeneInfo[] = [
  // 육량형 3개
  { name: "PLAG1", category: "QUANTITY", description: "성장 및 체중 증가에 영향", importance: 20 },
  { name: "NCAPG2", category: "QUANTITY", description: "체구 크기와 성장 속도", importance: 19 },
  { name: "BTB", category: "QUANTITY", description: "도체 크기", importance: 18 },

  // 육질형 4개
  { name: "NT5E", category: "QUALITY", description: "근내지방도", importance: 20 },
  { name: "SCD", category: "QUALITY", description: "지방산 불포화도", importance: 19 },
  { name: "FASN", category: "QUALITY", description: "지방 합성", importance: 18 },
  { name: "CAPN1", category: "QUALITY", description: "육질 연도에 영향", importance: 17 },
];

/**
 * 경제형질 4개
 */
export const ECONOMIC_TRAITS: TraitInfo[] = [
  { name: "도체중", category: "ECONOMIC", description: "도체중" },
  { name: "등심단면적", category: "ECONOMIC", description: "등심단면적" },
  { name: "등지방두께", category: "ECONOMIC", description: "등지방두께" },
  { name: "근내지방도", category: "ECONOMIC", description: "근내지방도" },
];
