import {
  Controller,
  Get,
  Post,
  Body,
  Param,
  Delete,
  Put,
  UseGuards,
  Query,
} from "@nestjs/common"
import { ApiBearerAuth, ApiBody, ApiTags } from "@nestjs/swagger"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"
import { BusinessVerticalsService } from "./business-verticals.service"
import { CreateBusinessVerticalDto } from "../dto/create-business-verticals.dto"
import { FindAllBusinessVerticalDto } from "../dto/find-all-business-verticals.dto"
import { UpdateBusinessVerticalDto } from "../dto/update-business-verticals.dto"

@Controller("business-vertical")
@ApiTags("Business Vertical")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class BusinessVerticalsController {
  constructor(
    private readonly businessVerticalService: BusinessVerticalsService,
  ) {}

  // Create a new business vertical
  @Post("create")
  @ApiBody({ type: CreateBusinessVerticalDto })
  async createBusinessVertical(
    @Body() createBusinessVerticalDto: CreateBusinessVerticalDto,
  ) {
    return await this.businessVerticalService.createBusinessVertical(
      createBusinessVerticalDto,
    )
  }

  // Get all business verticals
  @Get("list")
  async findAllBusinessVerticals(
    @Query() businessVerticalDto: FindAllBusinessVerticalDto,
  ) {
    return this.businessVerticalService.findAllBusinessVerticals(
      businessVerticalDto,
    )
  }

  // Get a specific business vertical by ID
  @Get("list/:id")
  async findOne(@Param("id") id: number) {
    return await this.businessVerticalService.findOneBusinessVertical(id)
  }

  // Update a business vertical by ID
  @Put("update/:id")
  @ApiBody({ type: UpdateBusinessVerticalDto })
  async update(
    @Param("id") id: number,
    @Body() updateData: UpdateBusinessVerticalDto,
  ) {
    return await this.businessVerticalService.updateBusinessVertical(
      id,
      updateData,
    )
  }

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

  // Get business vertical dropdown
  @Get("dropdown")
  async getBusinessVerticalsDropdown() {
    return await this.businessVerticalService.getBusinessVerticalsDropdown()
  }
}
