import {
  Controller,
  Get,
  Post,
  Body,
  Param,
  Delete,
  Put,
  UseGuards,
  Query,
} from "@nestjs/common"
import { CreatePermissionDto } from "../dto/create-permission.dto"
import { UpdatePermissionDto } from "../dto/update-permission.dto"
import { ApiBearerAuth, ApiBody, ApiTags } from "@nestjs/swagger"
import { PermissionService } from "./permission.service"
import { FindAllPermissionDto } from "../dto/find-all-permission.dto"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"

@Controller("permissions")
@ApiTags("Permission")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class PermissionsController {
  constructor(private readonly permissionsService: PermissionService) {}

  // Create a new permission
  @Post("create")
  @ApiBody({ type: CreatePermissionDto })
  async createPermission(@Body() createPermissionDto: CreatePermissionDto) {
    return await this.permissionsService.createPermission(createPermissionDto)
  }

  // Get all permissions
  @Get("list")
  async findAllRoles(@Query() body: FindAllPermissionDto) {
    return this.permissionsService.findAllPermissions(body)
  }

  // Get a specific permission by ID
  @Get("list/:id")
  async findOne(@Param("id") id: number) {
    return await this.permissionsService.findOnePermission(id)
  }

  // Update a permission by ID
  @Put("update/:id")
  @ApiBody({ type: UpdatePermissionDto })
  async update(
    @Param("id") id: number,
    @Body() updateData: UpdatePermissionDto,
  ) {
    return await this.permissionsService.updatePermission(id, updateData)
  }

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