import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Patch,
  Post,
  Put,
  Query,
  Req,
  UseGuards,
} from "@nestjs/common"
import { RoleService } from "./role.service"
import { ApiBearerAuth, ApiTags } from "@nestjs/swagger"
import { CreateRoleDto } from "./dto/create-role.dto"
import { UpdateRoleDto } from "./dto/update-role.dto"
import { AuthGuardMiddleware } from "../../middleware/auth-guard.middleware"

@Controller("roles")
@ApiBearerAuth("access-token")
@ApiTags("Roles")
@UseGuards(AuthGuardMiddleware)
export class RoleController {
  constructor(private readonly roleService: RoleService) {}

  @Post()
  create(@Body() createRoleDto: CreateRoleDto, @Req() request: any) {
    return this.roleService.create(
      createRoleDto,
      request.headers["authorization"],
    )
  }

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

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

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

  @Patch("active-inactive/:id")
  activeInactive(@Param("id") id: string, @Req() request: Request) {
    return this.roleService.activeInactive(
      +id,
      request.headers["authorization"],
    )
  }
}
