import {
  Controller,
  Get,
  Post,
  Body,
  Param,
  Delete,
  UseGuards,
  Query,
  Patch,
} from "@nestjs/common"
import { ApiBearerAuth, ApiBody, ApiTags } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"
import { CurrencyService } from "./currency.service"
import { CreateCurrencyDto } from "../dto/create-currency.dto"
import { FindAllCurrencyDto } from "../dto/find-all-currency.dto"
import { UpdateCurrencyDto } from "../dto/update-currency.dto"

@Controller("currency")
@ApiTags("Currency")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class CurrencyController {
  constructor(private readonly currencyService: CurrencyService) {}

  @Post()
  @ApiBody({ type: CreateCurrencyDto })
  async createCurrency(@Body() createCurrencyDto: CreateCurrencyDto) {
    return await this.currencyService.createCurrency(createCurrencyDto)
  }

  @Get()
  async findAllCurrencies(@Query() currencyFilterDto: FindAllCurrencyDto) {
    return this.currencyService.findAllCurrency(currencyFilterDto)
  }

  @Get(":id")
  async findOneCurrency(@Param("id") id: number) {
    return await this.currencyService.findOneCurrency(id)
  }

  @Patch(":id")
  @ApiBody({ type: UpdateCurrencyDto })
  async updateCurrency(
    @Param("id") id: number,
    @Body() updateCurrencyDto: UpdateCurrencyDto,
  ) {
    return await this.currencyService.updateCurrency(id, updateCurrencyDto)
  }

  @Delete(":id")
  async removeCurrency(@Param("id") id: number) {
    return await this.currencyService.remove(id)
  }
}
