/**
 * 유전체 분석 유효성 조건 설정
 *
 * @description
 * 유전체 분석 데이터가 유효한지 판단하는 조건 정의
 *
 * 유효 조건:
 * 1. chipSireName === '일치' (아비 칩 데이터 일치)
 * 2. chipDamName !== '불일치' (어미 칩 데이터 불일치가 아님)
 * 3. chipDamName !== '이력제부재' (어미 이력제 부재가 아님)
 * 4. cowId가 EXCLUDED_COW_IDS에 포함되지 않음
 *
 * 제외되는 경우:
 * - chipSireName !== '일치' (아비 불일치, 이력제부재 등)
 * - chipDamName === '불일치' (어미 불일치)
 * - chipDamName === '이력제부재' (어미 이력제 부재)
 * - 분석불가 개체 (EXCLUDED_COW_IDS)
 */

/** 유효한 아비 칩 이름 값 */
export const VALID_CHIP_SIRE_NAME = '일치';

/** 제외할 어미 칩 이름 값 목록 */
export const INVALID_CHIP_DAM_NAMES = ['불일치', '이력제부재'];

/** 순위/평균 집계 대상 지역 (이 지역만 집계에 포함, 테스트/기관 계정은 다른 regionSi 사용) */
export const VALID_REGION = '보은군';

/** ===============================개별 제외 개체 목록 (분석불가 등 특수 사유) 하단 개체 정보없음 확인필요=================*/
export const EXCLUDED_COW_IDS = [
  'KOR002191642861',
  // 일치인데 정보가 없음 
  // 김정태님 유전체 내역 빠짐 1두
  // 근데 유전자 검사내역은 있음
  // 일단 모근 1회분량이고 재검사어려움 , 모근상태 불량으로 인한 DNA분해로 인해 분석불가 상태로 넣음
  // 분석불가로 넣으면 유전자가 조회가 안됨 
  // 유전자가 조회될수 있는 조건은 불일치와 이력제부재만 가능 // 분석불가는 아예안되는듯

];
//=================================================================================================================

/** @deprecated INVALID_CHIP_DAM_NAMES 사용 권장 */
export const INVALID_CHIP_DAM_NAME = '불일치';

/**
 * 유전체 분석 데이터 유효성 검사
 *
 * @param chipSireName - 아비 칩 이름 (친자감별 결과)
 * @param chipDamName - 어미 칩 이름 (친자감별 결과)
 * @param cowId - 개체식별번호 (선택, 개별 제외 목록 확인용)
 * @returns 유효한 분석 데이터인지 여부
 *
 * @example
 * // 유효한 경우
 * isValidGenomeAnalysis('일치', '일치')       // true
 * isValidGenomeAnalysis('일치', null)         // true
 * isValidGenomeAnalysis('일치', '정보없음')   // true
 *
 * // 유효하지 않은 경우
 * isValidGenomeAnalysis('불일치', '일치')     // false (아비 불일치)
 * isValidGenomeAnalysis('일치', '불일치')     // false (어미 불일치)
 * isValidGenomeAnalysis('일치', '이력제부재') // false (어미 이력제부재)
 * isValidGenomeAnalysis('일치', '일치', 'KOR002191642861') // false (제외 개체)
 */
export function isValidGenomeAnalysis(
  chipSireName: string | null | undefined,
  chipDamName: string | null | undefined,
  cowId?: string | null,
): boolean {
  // 1. 개별 제외 개체 확인
  if (cowId && EXCLUDED_COW_IDS.includes(cowId)) return false;

  // 2. 아비명이 '일치'가 아니면 무효 (null, 불일치, 분석불가, 정보없음 등)
  if (chipSireName !== VALID_CHIP_SIRE_NAME) return false;

  // 3. 어미명이 '불일치' 또는 '이력제부재'면 무효
  if (chipDamName && INVALID_CHIP_DAM_NAMES.includes(chipDamName)) return false;

  return true;
}

/**
 * SQL WHERE 조건 생성 (TypeORM QueryBuilder용)
 * 부/모 불일치여도 유전자 데이터 있으면 표시하므로 조건 제거
 *
 * @param alias - 테이블 별칭 (예: 'request', 'genome')
 * @returns SQL 조건 문자열 (항상 true)
 *
 * @example
 * queryBuilder.andWhere(getValidGenomeConditionSQL('request'));
 */
export function getValidGenomeConditionSQL(alias: string): string {
  // 부/모 불일치 조건 제거 - 유전자 데이터 있으면 모두 표시
  return '1=1';
}
