import { Controller, Post, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import { RequireModule } from '../../auth/decorators/require-module.decorator';
import { RequirePermission } from '../../auth/decorators/require-permission.decorator';
import type { LoginUserInfo } from '../../auth/dto/login.dto';
import { GetUser } from '../../auth/get-user.decorator';
import { ModuleGuard } from '../../auth/guards/module.guard';
import { PermissionGuard } from '../../auth/guards/permission.guard';
import { RrhhSeedService } from '../services/seed.service';

@ApiTags('RRHH - Setup')
@Controller({ path: 'rrhh/seed-defaults', version: '1' })
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('RRHH')
@ApiBearerAuth()
export class RrhhSeedController {
  constructor(private readonly service: RrhhSeedService) {}

  @Post()
  @RequirePermission('RRHH', 'RH_CFG_PARAMETRO_EDITAR')
  @ApiOperation({
    summary: 'Sembrar conceptos del sistema y parámetros legales por defecto',
    description:
      'Idempotente. Crea los conceptos del sistema (SALARIO_BASE, IPS_*, HORAS_EXTRA_*, etc.) ' +
      'y parámetros legales (IPS %, SMLV, límites) si aún no existen para esta empresa.',
  })
  sembrar(@GetUser() user: LoginUserInfo) {
    return this.service.sembrarTodo(user.empresa_id);
  }

  @Post('presentismo-demo')
  @RequirePermission('RRHH', 'RH_CFG_PARAMETRO_EDITAR')
  @ApiOperation({
    summary: 'Sembrar dataset de prueba integral para Presentismo (M16-M22)',
    description:
      'Idempotente. Crea relojes, turnos, asignaciones, tolerancias, permisos, marcaciones, ' +
      'ajustes/log de correcciones y novedades de ejemplo para pruebas funcionales de Presentismo.',
  })
  sembrarPresentismoDemo(@GetUser() user: LoginUserInfo) {
    return this.service.sembrarPresentismoDemo(user.empresa_id);
  }

  @Post('legajos-foto-migration')
  @RequirePermission('RRHH', 'RH_CFG_PARAMETRO_EDITAR')
  @ApiOperation({
    summary: 'Migrar rrhh_empleados.foto_url a legajos como tipo FOTO_PERFIL',
    description:
      'Idempotente por empleado. Crea un documento ACTIVO FOTO_PERFIL por cada empleado con foto_url si aún no existe uno activo.',
  })
  sembrarLegajosFotoMigration(@GetUser() user: LoginUserInfo) {
    return this.service.sembrarLegajosFotoMigration(user.empresa_id, user.id);
  }
}
