import { Controller, Get, Param, Post, Body } from '@nestjs/common';
import { GeneService } from './gene.service';
import { GeneDetailModel } from './entities/gene-detail.entity';

@Controller('gene')
export class GeneController {
  constructor(private readonly geneService: GeneService) {}

  /**
   * 개체식별번호로 유전자 상세 정보 조회
   * GET /gene/:cowId
   */
  @Get(':cowId')
  async findByCowId(@Param('cowId') cowId: string): Promise<GeneDetailModel[]> {
    return this.geneService.findByCowId(cowId);
  }

  /**
   * 개체별 유전자 요약 정보 조회
   * GET /gene/summary/:cowId
   */
  @Get('summary/:cowId')
  async getGeneSummary(@Param('cowId') cowId: string): Promise<{
    total: number;
    homozygousCount: number;
    heterozygousCount: number;
  }> {
    return this.geneService.getGeneSummary(cowId);
  }

  /**
   * 의뢰번호로 유전자 상세 정보 조회
   * GET /gene/request/:requestNo
   */
  @Get('request/:requestNo')
  async findByRequestNo(@Param('requestNo') requestNo: number): Promise<GeneDetailModel[]> {
    return this.geneService.findByRequestNo(requestNo);
  }

  /**
   * 유전자 상세 정보 단건 조회
   * GET /gene/detail/:geneDetailNo
   */
  @Get('detail/:geneDetailNo')
  async findOne(@Param('geneDetailNo') geneDetailNo: number): Promise<GeneDetailModel> {
    return this.geneService.findOne(geneDetailNo);
  }

  /**
   * 유전자 상세 정보 생성
   * POST /gene
   */
  @Post()
  async create(@Body() data: Partial<GeneDetailModel>): Promise<GeneDetailModel> {
    return this.geneService.create(data);
  }

  /**
   * 유전자 상세 정보 일괄 생성
   * POST /gene/bulk
   */
  @Post('bulk')
  async createBulk(@Body() dataList: Partial<GeneDetailModel>[]): Promise<GeneDetailModel[]> {
    return this.geneService.createBulk(dataList);
  }
}
