/**
 * Gene API
 * 유전자(SNP) 분석 결과 조회 API
 */

import apiClient from "../api-client";

/**
 * 유전자 상세 정보 타입
 */
export interface GeneDetail {
  pkGeneDetailNo: number;
  fkRequestNo: number | null;
  cowId: string | null;
  snpName: string | null;
  chromosome: string | null;
  position: string | null;
  snpType: string | null;
  allele1: string | null;
  allele2: string | null;
  remarks: string | null;
  regDt?: string;
  updtDt?: string;
  genomeRequest?: {
    pkRequestNo: number;
    requestDt: string | null;
    chipReportDt: string | null;
    chipSireName: string | null;
    chipDamName: string | null;
  };
}

/**
 * 유전자 요약 정보 타입
 */
export interface GeneSummary {
  total: number;
  homozygousCount: number;
  heterozygousCount: number;
}

export const geneApi = {
  /**
   * 개체식별번호로 유전자 상세 정보 조회
   * GET /gene/:cowId
   */
  findByCowId: async (cowId: string): Promise<GeneDetail[]> => {
    const response = await apiClient.get<GeneDetail[]>(`/gene/${cowId}`);
    return response.data;
  },

  /**
   * 개체별 유전자 요약 정보 조회
   * GET /gene/summary/:cowId
   */
  getGeneSummary: async (cowId: string): Promise<GeneSummary> => {
    const response = await apiClient.get<GeneSummary>(`/gene/summary/${cowId}`);
    return response.data;
  },

  /**
   * 의뢰번호로 유전자 상세 정보 조회
   * GET /gene/request/:requestNo
   */
  findByRequestNo: async (requestNo: number): Promise<GeneDetail[]> => {
    const response = await apiClient.get<GeneDetail[]>(`/gene/request/${requestNo}`);
    return response.data;
  },

  /**
   * 유전자 상세 정보 단건 조회
   * GET /gene/detail/:geneDetailNo
   */
  findOne: async (geneDetailNo: number): Promise<GeneDetail> => {
    const response = await apiClient.get<GeneDetail>(`/gene/detail/${geneDetailNo}`);
    return response.data;
  },

  /**
   * 유전자 상세 정보 생성
   * POST /gene
   */
  create: async (data: Partial<GeneDetail>): Promise<GeneDetail> => {
    const response = await apiClient.post<GeneDetail>('/gene', data);
    return response.data;
  },

  /**
   * 유전자 상세 정보 일괄 생성
   * POST /gene/bulk
   */
  createBulk: async (dataList: Partial<GeneDetail>[]): Promise<GeneDetail[]> => {
    const response = await apiClient.post<GeneDetail[]>('/gene/bulk', dataList);
    return response.data;
  },
};
