/**
 * 검사 집계 DTO
 * 농가별/개체별 유전체, 유전자, 번식능력 검사 현황
 */

// 개체별 검사 상세
export class CowTestDetailDto {
  cowId: string;           // 개체번호
  cowBirthDt: string | null;  // 생년월일
  cowSex: string | null;      // 성별
  hasGenome: boolean;      // 유전체 검사 여부
  hasGene: boolean;        // 유전자 검사 여부
  hasMpt: boolean;         // 번식능력 검사 여부
  testCount: number;       // 받은 검사 수 (1~3)
  testTypes: string[];     // 검사 종류 목록
}

// 농가별 검사 집계
export class FarmTestSummaryDto {
  farmNo: number;
  farmerName: string | null;
  regionSi: string | null;

  // 검사별 개체수 (중복 허용)
  genomeCowCount: number;   // 유전체 검사 개체수
  geneCowCount: number;     // 유전자 검사 개체수
  mptCowCount: number;      // 번식능력 검사 개체수

  // 중복 검사 조합별 개체수
  genomeOnly: number;       // 유전체만
  geneOnly: number;         // 유전자만
  mptOnly: number;          // 번식능력만
  genomeAndGene: number;    // 유전체 + 유전자
  genomeAndMpt: number;     // 유전체 + 번식능력
  geneAndMpt: number;       // 유전자 + 번식능력
  allThree: number;         // 유전체 + 유전자 + 번식능력

  // 합계
  totalCows: number;        // 전체 개체수 (합집합, 중복 제외)
  totalTests: number;       // 총 검사 건수 (중복 포함)

  // 개체별 상세 (선택적)
  cows?: CowTestDetailDto[];
}

// 전체 검사 집계 (모든 농가 합산)
export class TestSummaryDto {
  // 전체 집계
  totalFarms: number;         // 농가 수
  totalCows: number;          // 전체 개체수 (합집합)
  totalTests: number;         // 총 검사 건수 (중복 포함)

  // 검사별 개체수 (중복 허용)
  genomeCowCount: number;
  geneCowCount: number;
  mptCowCount: number;

  // 중복 검사 조합별 개체수
  genomeOnly: number;
  geneOnly: number;
  mptOnly: number;
  genomeAndGene: number;
  genomeAndMpt: number;
  geneAndMpt: number;
  allThree: number;

  // 농가별 상세
  farms: FarmTestSummaryDto[];
}
