import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  Query,
  UseGuards,
} from "@nestjs/common"
import { EscortsService } from "./escorts.service"
import { CreateEscortDto } from "../dto/create-escort.dto"
import { UpdateEscortDto } from "../dto/update-escort.dto"
import { UpsertEscortDto } from "../dto/bulk-escort.dto"
import { FilterEscortDto } from "../dto/filter-escort.dto"
import { ApiBearerAuth, ApiTags } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"

@Controller("escorts")
@ApiTags("Escorts")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class EscortsController {
  constructor(private readonly escortsService: EscortsService) {}

  @Post()
  create(@Body() createEscortDto: CreateEscortDto) {
    return this.escortsService.create(createEscortDto)
  }

  @Get()
  findAll(@Query() filterEscortDto: FilterEscortDto) {
    return this.escortsService.findAll(filterEscortDto)
  }

  @Get("types")
  getEscortTypes() {
    return this.escortsService.getEscortTypes()
  }

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

  @Patch("upsert")
  async upsertEscortList(@Body() upsertDto: UpsertEscortDto) {
    return this.escortsService.upsertCustomerEscorts(upsertDto)
  }

  @Patch(":id")
  update(@Param("id") id: string, @Body() updateEscortDto: UpdateEscortDto) {
    return this.escortsService.update(+id, updateEscortDto)
  }

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