import {
  Controller,
  Get,
  Post,
  Body,
  Put,
  Param,
  Delete,
  Query,
  Req,
  UseGuards,
} from "@nestjs/common"
import { VendorsService } from "./vendors.service"
import { CreateVendorDto } from "./dto/create-vendor.dto"
import { UpdateVendorDto } from "./dto/update-vendor.dto"
import { VendorFiltersDto } from "./dto/vendor-filters.dto"
import { ApiBearerAuth, ApiTags } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"

@Controller("vendors")
@ApiTags("Vendors")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class VendorsController {
  constructor(private readonly vendorsService: VendorsService) {}

  // ==================== VENDOR TYPES ROUTES ====================

  @Get("types")
  getTypes(@Req() request: Request) {
    return this.vendorsService.getTypes(request.headers["authorization"])
  }

  // ==================== VENDORS ROUTES ====================

  @Get()
  findAll(@Query() query: VendorFiltersDto, @Req() request: Request) {
    return this.vendorsService.findAll(query, request.headers["authorization"])
  }

  @Post()
  create(@Body() createVendorDto: CreateVendorDto, @Req() request: Request) {
    return this.vendorsService.create(
      createVendorDto,
      request.headers["authorization"],
    )
  }

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

  @Put(":id")
  update(
    @Param("id") id: string,
    @Body() updateVendorDto: UpdateVendorDto,
    @Req() request: Request,
  ) {
    return this.vendorsService.update(
      +id,
      updateVendorDto,
      request.headers["authorization"],
    )
  }

  @Delete(":id")
  remove(@Param("id") id: string, @Req() request: Request) {
    return this.vendorsService.remove(+id, request.headers["authorization"])
  }
}
