import {
  Controller,
  Get,
  Post,
  Body,
  Delete,
  Param,
  Query,
  Req,
  Patch,
} from "@nestjs/common"
import { RolePermissionsService } from "./role-permissions.service"
import { CreateRolePermissionDto } from "./dto/create-role-permission.dto"
import { AssignPermissionsDto } from "./dto/assign-permissions.dto"
import { FindAllRolePermissionsDto } from "./dto/find-all-role-permissions.dto"
import { ApiTags } from "@nestjs/swagger"

@Controller("role-permissions")
@ApiTags("Role Permissions")
export class RolePermissionsController {
  constructor(
    private readonly rolePermissionsService: RolePermissionsService,
  ) {}

  @Post()
  create(
    @Body() createRolePermissionDto: CreateRolePermissionDto,
    @Req() request: Request,
  ) {
    return this.rolePermissionsService.create(
      createRolePermissionDto,
      request.headers["authorization"],
    )
  }

  @Post("assign")
  assignPermissions(
    @Body() assignPermissionsDto: AssignPermissionsDto,
    @Req() request: Request,
  ) {
    return this.rolePermissionsService.assignPermissionsToRole(
      assignPermissionsDto,
      request.headers["authorization"],
    )
  }

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

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

  @Get("role-permissions")
  getRolePermissions(@Req() request: Request) {
    return this.rolePermissionsService.getRolePermissions(
      request.headers["authorization"],
    )
  }

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

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