import { Controller, Get, Post, Body, Query } from "@nestjs/common";
import { DiagnosisSubCategoryListService } from "./diagnosis-sub-category-list.service";
import { CreateDiagnosisSubCategoryListDto } from "./dto/create-diagnosis-sub-category-list.dto";
import { UpdateDiagnosisSubCategoryListDto } from "./dto/update-diagnosis-sub-category-list.dto";
import { ApiTags, ApiOperation, ApiResponse, ApiQuery } from "@nestjs/swagger";
import { subdiagreportGetSuccess } from "./entities/diagnosis-sub-category-list.entity";

@ApiTags("Diagnosis Sub Category List") // Swagger tag for grouping endpoints
@Controller("diagnosis-sub-category-list")
export class DiagnosisSubCategoryListController {
  constructor(
    private readonly diagnosisSubCategoryListService: DiagnosisSubCategoryListService
  ) {}

  @Post()
  @ApiOperation({ summary: "Create a new diagnosis sub-category" }) // Operation summary
  @ApiResponse({
    status: 201,
    description: "The sub-category has been successfully created.",
    type: subdiagreportGetSuccess,
  })
  @ApiResponse({
    status: 400,
    description: "Bad Request. Validation errors or invalid data.",
  })
  create(
    @Body() createDiagnosisSubCategoryListDto: CreateDiagnosisSubCategoryListDto
  ) {
    return this.diagnosisSubCategoryListService.create(
      createDiagnosisSubCategoryListDto
    );
  }

  @Get()
  @ApiOperation({
    summary:
      "Find all diagnosis sub-categories by category ID and optional search",
  }) // Operation summary
  @ApiResponse({
    status: 200,
    description: "List of diagnosis sub-categories",
    type: UpdateDiagnosisSubCategoryListDto,
  })
  @ApiQuery({
    name: "category_id",
    required: true,
    type: Number,
    description: "The ID of the related category",
  })
  @ApiQuery({
    name: "search",
    required: false,
    type: String,
    description: "Search query for filtering sub-categories",
  })
  findAll(
    @Query("category_id") category_id: number,
    @Query("search") search: string
  ) {
    return this.diagnosisSubCategoryListService.findAll(category_id, search);
  }

  @Get("/units")
  async getAllUnits() {
    return await this.diagnosisSubCategoryListService.findunits();
  }

  @Post("/addunit")
  async addUnit(@Body("unit_name") unit_name: string) {
    return await this.diagnosisSubCategoryListService.insertunits(unit_name);
  }
}
