// role-permission.controller.ts
import {
  Controller,
  Get,
  Post,
  Body,
  Param,
  Delete,
  Put,
  UseGuards,
  Query,
} from "@nestjs/common"
import { CreateRolePermissionDto } from "../dto/create-role-permission.dto"
import { UpdateRolePermissionDto } from "../dto/update-role-permission.dto"
import { ApiBearerAuth, ApiBody, ApiTags } from "@nestjs/swagger"
import { RolePermissionService } from "./role-permission.service"
import { FindAllRolePermissionDto } from "../dto/find-all-role-permission.dto"
import { AuthGuardMiddleware } from "src/middleware/auth-guard.middleware"

@Controller("role-permissions")
@ApiTags("Role-Permission")
@UseGuards(AuthGuardMiddleware)
@ApiBearerAuth("access-token")
export class RolePermissionController {
  constructor(private readonly rolePermissionService: RolePermissionService) {}

  // Create a new role-permission mapping
  @Post("create/bulk")
  @ApiBody({ type: [CreateRolePermissionDto] })
  async createBulkRolePermissions(@Body() dtos: CreateRolePermissionDto[]) {
    return this.rolePermissionService.createRolePermissionBulk(dtos)
  }

  // Get all role-permission mappings
  @Get("list")
  async findAllRolePermissions(
    @Query() rolePermissionDto: FindAllRolePermissionDto,
  ) {
    return this.rolePermissionService.findAllRolePermissions(rolePermissionDto)
  }

  @Get("list/:roleId/:moduleId")
  async findOne(
    @Param("roleId") roleId: number,
    @Param("moduleId") moduleId: number,
  ) {
    return await this.rolePermissionService.findOneRolePermission(
      roleId,
      moduleId,
    )
  }

  // Update a role-permission by ID
  @Put("update/:id")
  @ApiBody({ type: UpdateRolePermissionDto })
  async update(
    @Param("id") id: number,
    @Body() updateData: UpdateRolePermissionDto,
  ) {
    return await this.rolePermissionService.updateRolePermission(id, updateData)
  }

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