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

/**
 * MPT(혈액화학검사) 결과 DTO
 */
export interface MptDto {
  pkMptNo: number;
  cowShortNo: string;
  fkFarmNo: number;
  testDt: string;
  monthAge: number;
  milkYield: number;
  parity: number;
  // 에너지 대사
  glucose: number;
  cholesterol: number;
  nefa: number;
  bcs: number;
  // 단백질 대사
  totalProtein: number;
  albumin: number;
  globulin: number;
  agRatio: number;
  bun: number;
  // 간기능
  ast: number;
  ggt: number;
  fattyLiverIdx: number;
  // 미네랄
  calcium: number;
  phosphorus: number;
  caPRatio: number;
  magnesium: number;
  creatinine: number;
  // Relations
  farm?: {
    pkFarmNo: number;
    farmerName: string;
  };
}

/**
 * MPT(혈액화학검사) 관련 API
 */
export const mptApi = {
  /**
   * GET /mpt - 전체 검사 결과 목록
   */
  findAll: async (): Promise<MptDto[]> => {
    return await apiClient.get("/mpt");
  },

  /**
   * GET /mpt?farmId=:farmId - 특정 농장의 검사 결과
   */
  findByFarmId: async (farmId: number): Promise<MptDto[]> => {
    return await apiClient.get("/mpt", {
      params: { farmId },
    });
  },

  /**
   * GET /mpt?cowShortNo=:cowShortNo - 특정 개체의 검사 결과
   */
  findByCowShortNo: async (cowShortNo: string): Promise<MptDto[]> => {
    return await apiClient.get("/mpt", {
      params: { cowShortNo },
    });
  },

  /**
   * GET /mpt/:id - 검사 결과 상세 조회
   */
  findOne: async (id: number): Promise<MptDto> => {
    return await apiClient.get(`/mpt/${id}`);
  },

  /**
   * POST /mpt - 검사 결과 생성
   */
  create: async (data: Partial<MptDto>): Promise<MptDto> => {
    return await apiClient.post("/mpt", data);
  },

  /**
   * POST /mpt/bulk - 검사 결과 일괄 생성
   */
  bulkCreate: async (data: Partial<MptDto>[]): Promise<MptDto[]> => {
    return await apiClient.post("/mpt/bulk", data);
  },

  /**
   * PUT /mpt/:id - 검사 결과 수정
   */
  update: async (id: number, data: Partial<MptDto>): Promise<MptDto> => {
    return await apiClient.put(`/mpt/${id}`, data);
  },

  /**
   * DELETE /mpt/:id - 검사 결과 삭제
   */
  remove: async (id: number): Promise<void> => {
    return await apiClient.delete(`/mpt/${id}`);
  },
};
