/**
 * 대시보드 관련 타입 정의
 */

/**
 * 대시보드 요약 정보
 */
export interface DashboardSummaryDto {
  totalCows: number; // 전체 개체 수
  totalFarms: number; // 전체 농장 수
  totalOwnedKpns: number; // 보유 KPN 수
  recentRecommendations: number; // 최근 7일 추천 수
  inbreedingRiskCount: number; // 근친도 위험 개체 수
  averageInbreeding: number; // 평균 근친도 (%)
  topGenes: TopGeneDto[]; // 상위 우량유전자 보유 현황
}

/**
 * 상위 유전자 보유 현황
 */
export interface TopGeneDto {
  geneName: string; // 유전자명 (예: 'CAPN1')
  count: number; // 보유 개체 수
  percentage: number; // 전체 대비 비율 (%)
}

/**
 * 농장 통계
 */
export interface FarmStatisticsDto {
  farmNo: number; // 농장 번호
  farmName: string; // 농장명
  totalCows: number; // 전체 개체 수
  maleCows: number; // 수컷 개체 수
  femaleCows: number; // 암컷 개체 수
  averageAge: number; // 평균 월령
  averageInbreeding: number; // 평균 근친도 (%)
  geneDistribution: GeneDistributionItem[]; // 유전자 분포
  inbreedingDistribution: InbreedingDistributionDto; // 근친도 분포
}

/**
 * 유전자 분포 항목
 */
export interface GeneDistributionItem {
  geneName: string; // 유전자명
  count: number; // 보유 개체 수
  percentage: number; // 비율 (%)
  type: 'QUALITY' | 'QUANTITY'; // 유형 (육질형/육량형)
}

/**
 * 근친도 분포
 */
export interface InbreedingDistributionDto {
  normal: number; // 정상 범위 개체 수 (<6.25%)
  warning: number; // 주의 범위 개체 수 (6.25~12.5%)
  danger: number; // 위험 범위 개체 수 (>12.5%)
}

/**
 * 최근 활동 내역
 */
export interface RecentActivitiesDto {
  activities: ActivityDto[]; // 활동 목록
}

/**
 * 활동 항목
 */
export interface ActivityDto {
  id: number; // 활동 ID
  type: 'RECOMMENDATION' | 'SIMULATION' | 'COW_ADDED' | 'KPN_ADDED'; // 활동 유형
  description: string; // 활동 설명
  targetId?: number; // 대상 ID (개체번호 등)
  regDt: Date; // 활동 일시
}

/**
 * 유전자 분포 현황
 */
export interface GeneDistributionDto {
  totalGenes: number; // 전체 유전자 수
  qualityGenes: GeneDistributionItem[]; // 육질형 유전자 분포
  quantityGenes: GeneDistributionItem[]; // 육량형 유전자 분포
}

/**
 * 농장 현황 요약 (section-cards용)
 */
export interface FarmSummaryDto {
  totalCows: number; // 전체 개체 수
  analysisComplete: number; // 분석 완료 개체 수
}

/**
 * 유전자 보유 현황
 */
export interface GenePossessionStatus {
  // 육질형 유전자 보유 현황
  meatQuality: {
    markers: {
      markerName: string;     // 마커명
      possessionRate: number; // 보유율(%)
      regionAvg: number;      // 보은군 평균(%)
      gap: number;            // 차이(%p)
    }[];
    averageRate: number;      // 육질형 평균 보유율(%)
    regionAvg: number;        // 보은군 평균(%)
  };

  // 육량형 유전자 보유 현황
  meatQuantity: {
    markers: {
      markerName: string;
      possessionRate: number;
      regionAvg: number;
      gap: number;
    }[];
    averageRate: number;      // 육량형 평균 보유율(%)
    regionAvg: number;        // 보은군 평균(%)
  };

  // 농장 유전자 특성 요약
  farmCharacteristic: {
    dominantType: 'meatQuality' | 'meatQuantity' | 'balanced'; // 우세 타입
    meatQualityStrength: number;  // 육질형 강도 (0-100)
    meatQuantityStrength: number; // 육량형 강도 (0-100)
  };
}

/**
 * 개체 분포 분석
 */
export interface CowDistributionDto {
  farmNo: number;
  genePossessionDistribution: {
    meatQuality: {
      high: number;
      medium: number;
      low: number;
    };
    meatQuantity: {
      high: number;
      medium: number;
      low: number;
    };
    byMarker: {
      markerName: string;
      distribution: {
        AA: number;
        AB: number;
        BB: number;
      };
    }[];
  };
  genomeScoreDistribution: {
    '0-20': number;
    '20-40': number;
    '40-60': number;
    '60-80': number;
    '80-100': number;
  };
  fertilityScoreDistribution: {
    '0-20': number;
    '20-40': number;
    '40-60': number;
    '60-80': number;
    '80-100': number;
  };
  totalScoreDistribution: {
    '0-20': number;
    '20-40': number;
    '40-60': number;
    '60-80': number;
    '80-100': number;
  };
}

/**
 * 농장 종합 평가
 */
export interface FarmEvaluationDto {
  farmNo: number; // 농장 번호
  farmName: string; // 농장명
  genePossession: GenePossessionStatus; // 유전자 보유 현황
  genomeScore: number; // 유전체 평균 점수
  genomeRank: number; // 유전체 순위
  genomeTotalFarms: number; // 전체 농장 수
  fertilityScore: number; // 번식능력 점수
  fertilityRank: number; // 번식능력 순위
  fertilityTotalFarms: number; // 전체 농장 수
  evaluationDate: Date; // 평가 일자
}
