import { Body, Controller, Delete, Get, Param, Post, Put, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { RequireModule } from 'src/auth/decorators/require-module.decorator';
import { RequirePermission } from 'src/auth/decorators/require-permission.decorator';
import { GetUser } from 'src/auth/get-user.decorator';
import { ModuleGuard } from 'src/auth/guards/module.guard';
import { PermissionGuard } from 'src/auth/guards/permission.guard';
import { CreatePerfileDto } from './dto/create-perfile.dto';
import { UpdatePerfileDto } from './dto/update-perfile.dto';
import { PerfilesService } from './perfiles.service';

@ApiTags('Perfiles')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('ADMINISTRACION')
@Controller({ path: 'perfiles', version: '1' })
export class PerfilesController {
  constructor(private readonly perfilesService: PerfilesService) {}

  @Post()
  @RequirePermission('ADMINISTRACION', 'ADM_PER_PERFIL_CREAR')
  create(@Body() createPerfileDto: CreatePerfileDto, @GetUser() user: any) {
    return this.perfilesService.create(createPerfileDto, user.empresa_id, user.id);
  }

  @Get()
  @RequirePermission('ADMINISTRACION', 'ADM_PER_PERFIL_VER')
  findAll(@GetUser() user: any) {
    return this.perfilesService.findAll(user.empresa_id);
  }

  @Get(':id')
  @RequirePermission('ADMINISTRACION', 'ADM_PER_PERFIL_VER')
  findOne(@Param('id') id: string) {
    return this.perfilesService.findOne(id);
  }

  @Put(':id')
  @RequirePermission('ADMINISTRACION', 'ADM_PER_PERFIL_EDITAR')
  update(@Param('id') id: string, @Body() updatePerfileDto: UpdatePerfileDto, @GetUser() user: any) {
    return this.perfilesService.update(id, updatePerfileDto, user.empresa_id, user.id);
  }

  @Delete(':id')
  @RequirePermission('ADMINISTRACION', 'ADM_PER_PERFIL_ELIMINAR')
  remove(@Param('id') id: string, @GetUser() user: any) {
    return this.perfilesService.remove(id, user.empresa_id, user.id);
  }
}
