/**
 * 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 interface MarkerModel {
  markerNo: number;
  markerNm: string;
  markerType: string; // 'QTY' | 'QLT'
  markerTypeCd?: string; // 'QTY' | 'QLT' (별칭)
  markerDesc?: string;
  description?: string;
  relatedTrait?: string;
}

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

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

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

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

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

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

  /**
   * 유전자 타입별 마커 목록 조회
   * GET /gene/markers/:type
   * TODO: 백엔드 API 구현 후 연동 필요
   */
  getGenesByType: async (type: 'QTY' | 'QLT'): Promise<MarkerModel[]> => {
    try {
      return await apiClient.get(`/gene/markers/${type}`);
    } catch {
      // API 미구현 시 빈 배열 반환
      console.warn(`[Gene API] getGenesByType(${type}) - API 미구현, 빈 배열 반환`);
      return [];
    }
  },

  /**
   * 전체 마커 목록 조회
   * GET /gene/markers
   * TODO: 백엔드 API 구현 후 연동 필요
   */
  getAllMarkers: async (): Promise<MarkerModel[]> => {
    try {
      return await apiClient.get('/gene/markers');
    } catch {
      // API 미구현 시 빈 배열 반환
      console.warn('[Gene API] getAllMarkers() - API 미구현, 빈 배열 반환');
      return [];
    }
  },
};
