import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  UseGuards,
  Query,
} from "@nestjs/common"
import { ApiBearerAuth, ApiTags } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"
import { ChargesTypeService } from "./charges-type.service"
import { CreateChargeTypeDto } from "../dto/create-charges-type.dto"
import { ChargeTypeFilterDto } from "../dto/filter-charges-type.dto"
import { UpdateChargeTypeDto } from "../dto/update-charges-type.dto"

@Controller("charge-types")
@ApiTags("Charge Types")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class ChargesTypeController {
  constructor(private readonly chargeTypeService: ChargesTypeService) {}

  @Post()
  async create(@Body() createChargeTypeDto: CreateChargeTypeDto) {
    return this.chargeTypeService.create(createChargeTypeDto)
  }

  @Get()
  async findAll(@Query() filterDto: ChargeTypeFilterDto) {
    const { limit, skip, search, sortBy, sortOrder } = filterDto
    return this.chargeTypeService.findAll(
      limit,
      skip,
      search,
      sortBy,
      sortOrder,
    )
  }

  @Get(":id")
  async findOne(@Param("id") id: string) {
    return this.chargeTypeService.findOne(+id)
  }

  @Patch(":id")
  async update(
    @Param("id") id: string,
    @Body() updateChargeTypeDto: UpdateChargeTypeDto,
  ) {
    return this.chargeTypeService.update(+id, updateChargeTypeDto)
  }

  @Delete(":id")
  async remove(@Param("id") id: string) {
    return this.chargeTypeService.remove(+id)
  }
}
