/**
 * 유전체 관련 타입 정의
 * 백엔드 API 응답 형식 기준으로 작성
 */

import { BaseFields } from './base.types';

/**
 * 유전체 분석 의뢰 정보
 * 백엔드 GenomeRequestModel Entity와 일치
 */
export interface GenomeRequestDto extends BaseFields {
  pkRequestNo: number; // No (PK)
  fkFarmNo?: number; // 농장번호 FK
  fkCowNo?: number; // 개체번호 FK
  cowRemarks?: string; // 개체 비고
  requestDt?: string; // 접수일자
  snpTest?: string; // SNP 검사
  msTest?: string; // MS 검사
  sampleAmount?: string; // 모근량
  sampleRemarks?: string; // 모근 비고

  // 칩 분석 정보
  chipNo?: string; // 분석 Chip 번호
  chipType?: string; // 분석 칩 종류
  chipInfo?: string; // 칩정보
  chipRemarks?: string; // 칩 비고
  chipSireName?: string; // 칩분석 아비명
  chipDamName?: string; // 칩분석 어미명
  chipReportDt?: string; // 칩분석 보고일자

  // MS 검사 결과
  msResultStatus?: string; // MS 감정결과
  msFatherEstimate?: string; // MS 추정부
  msReportDt?: string; // MS 보고일자

  delDt?: string; // 삭제일시 (Soft Delete)
}

/**
 * 형질 정보 (API 응답용)
 */
export interface TraitInfo {
  traitNm: string; // 형질명
  traitCtgry?: string; // 형질 카테고리
  traitDesc?: string; // 형질 설명
  [key: string]: any;
}

/**
 * 유전체 개체 형질 상세 (API 응답용 - genomeCows 배열 항목)
 */
export interface GenomeCow {
  traitVal?: number; // 형질 측정값
  breedVal?: number; // EBV (추정육종가)
  percentile?: number; // 백분위 순위
  traitInfo?: TraitInfo; // 형질 정보
  [key: string]: any;
}

/**
 * 유전체 형질 정보 (API 응답용)
 * 백엔드 findByCowId 응답 형식과 일치
 *
 * NOTE: genome_trait 테이블이 삭제되어 genome_trait_detail이 직접 genome_request와 연결됨
 */
export interface GenomeTraitDto extends BaseFields {
  fkRequestNo?: number; // 의뢰번호 FK

  // API 응답 필드
  request?: GenomeRequestDto; // 분석 의뢰 정보
  trait?: any; // 형질 기본 정보
  genomeCows?: GenomeCow[]; // 형질별 상세 데이터 (EBV, 백분위 등)

  // 계산된 필드 (프론트엔드용)
  anlysDt?: string; // 분석일자

  delDt?: string; // 삭제일시 (Soft Delete)
  [key: string]: any;
}

/**
 * 유전체 형질 상세 정보
 * 백엔드 GenomeTraitDetailModel Entity와 일치
 *
 * NOTE: fk_trait_no가 fk_request_no로 변경됨 (genome_trait 테이블 삭제로 인해)
 */
export interface GenomeTraitDetailDto extends BaseFields {
  pkTraitDetailNo: number; // 형질상세번호 PK
  fkRequestNo: number; // 의뢰번호 FK (변경됨: fkTraitNo → fkRequestNo)
  cowId?: string; // 개체식별번호 (KOR...) - 추가됨
  traitName?: string; // 형질명 (예: "12개월령체중", "도체중", "등심단면적")
  traitVal?: number; // 실측값
  traitEbv?: number; // 표준화육종가 (EBV: Estimated Breeding Value)
  traitPercentile?: number; // 백분위수 (전국 대비 순위)
  delDt?: string; // 삭제일시 (Soft Delete)
}

/**
 * 유전능력 평가 요청
 */
export interface GeneticAbilityRequest {
  selectedTraits?: {
    [traitName: string]: number; // 형질명: 가중치
  };
}

/**
 * 유전능력 평가 응답 (프론트엔드 확장)
 * 형질별 표준화육종가 기반 평가
 */
export interface GeneticAbilityDto {
  // 종합 평가
  overallScore?: number; // 종합 점수 (표준화 점수)
  grade?: 'A' | 'B' | 'C' | 'D' | 'E'; // 등급
  farmRank?: number; // 농장 내 순위
  totalCows?: number; // 농장 전체 개체 수

  // 35개 형질 데이터 (형질명: 표준화육종가)
  traits?: Record<string, number>;

  // 경제형질 (4개) - 표준화육종가 (백엔드 응답 필드명)
  carcassWeight_breedVal?: number; // 도체중
  eyeMuscleArea_breedVal?: number; // 등심단면적
  backfatThickness_breedVal?: number; // 등지방두께
  marbling_breedVal?: number; // 근내지방도

  // 체형형질 (10개) - 표준화육종가 (백엔드 응답 필드명)
  bodyHeight_breedVal?: number; // 체고
  crossHeight_breedVal?: number; // 십자
  bodyLength_breedVal?: number; // 체장
  chestDepth_breedVal?: number; // 흉심
  chestWidth_breedVal?: number; // 흉폭
  hipLength_breedVal?: number; // 고장
  hipWidth_breedVal?: number; // 요각폭
  sitBoneWidth_breedVal?: number; // 곤폭
  ischiumWidth_breedVal?: number; // 좌골폭
  chestGirth_breedVal?: number; // 흉위
}

// 타입 alias (호환성)
export type GenomeRequest = GenomeRequestDto;
export type GenomeTrait = GenomeTraitDto;
export type GenomeTraitDetail = GenomeTraitDetailDto;
export type GeneticAbility = GeneticAbilityDto;
