import {
  Controller,
  Get,
  Post,
  Body,
  Param,
  Delete,
  Put,
  UseGuards,
  Query,
} from "@nestjs/common"
import { CreateDepartmentDto } from "../dto/create-department.dto"
import { UpdateDepartmentDto } from "../dto/update-department.dto"
import { ApiBearerAuth, ApiBody, ApiTags } from "@nestjs/swagger"
import { DepartmentService } from "./department.service"
import { FindAllDepartmentDto } from "../dto/find-all-department.dto"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"

@Controller("department")
@ApiTags("Department")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class DepartmentController {
  constructor(private readonly departmentsService: DepartmentService) {}

  // Create a new department
  @Post("create")
  @ApiBody({ type: CreateDepartmentDto })
  async createDepartment(@Body() createDepartmentDto: CreateDepartmentDto) {
    return await this.departmentsService.createDepartment(createDepartmentDto)
  }

  // Get all departments
  @Get("list")
  async findAllDepartments(@Query() departmentDto: FindAllDepartmentDto) {
    return this.departmentsService.findAllDepartments(departmentDto)
  }

  // Get a specific department by ID
  @Get("list/:id")
  async findOne(@Param("id") id: number) {
    return await this.departmentsService.findOneDepartment(id)
  }

  // Update a department by ID
  @Put("update/:id")
  @ApiBody({ type: UpdateDepartmentDto })
  async update(
    @Param("id") id: number,
    @Body() updateData: UpdateDepartmentDto,
  ) {
    return await this.departmentsService.updateDepartment(id, updateData)
  }

  // Delete a department by ID
  @Delete("delete/:id")
  async remove(@Param("id") id: number) {
    return await this.departmentsService.remove(id)
  }

  @Get("dropdown")
  async getDepartmentDropDown() {
    return await this.departmentsService.getDepartmentDropDown()
  }
}
