import {
  Controller,
  Get,
  Post,
  Body,
  Put,
  Param,
  Delete,
  Query,
  Req,
  Patch,
} from "@nestjs/common"
import { PermissionsService } from "./permissions.service"
import { CreatePermissionDto } from "./dto/create-permission.dto"
import { UpdatePermissionDto } from "./dto/update-permission.dto"
import { PermissionsSyncService } from "./permissions-sync.service"
import { ApiTags } from "@nestjs/swagger"

@Controller("permissions")
@ApiTags("Permissions")
export class PermissionsController {
  constructor(
    private readonly permissionsService: PermissionsService,
    private readonly permissionsSyncService: PermissionsSyncService,
  ) {}

  @Post()
  create(
    @Body() createPermissionDto: CreatePermissionDto,
    @Req() request: Request,
  ) {
    return this.permissionsService.create(
      createPermissionDto,
      request.headers["authorization"],
    )
  }

  @Get()
  findAll(@Query() query: any) {
    return this.permissionsService.findAll(query)
  }

  @Get("grouped")
  getGroupedPermissions() {
    return this.permissionsService.getGroupedPermissions()
  }

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

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

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

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

  @Post("sync")
  syncPermissions() {
    return this.permissionsSyncService.syncPermissions()
  }

  @Post("sync-existing")
  syncExistingPermissions() {
    return this.permissionsSyncService.syncExistingPermissions()
  }
}
