import { Controller, Get, Query, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { GetUser } from 'src/auth/get-user.decorator';
import { RequireModule, RequirePermission } from 'src/auth/decorators';
import { ModuleGuard } from 'src/auth/guards/module.guard';
import { PermissionGuard } from 'src/auth/guards/permission.guard';
import { QueryMesaGestionDto } from './dto/mesa-gestion.dto';
import { MesaGestionService } from './mesa-gestion.service';

@ApiTags('Cobranzas - Mesa de Gestión')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('COBRANZAS')
@Controller({ path: 'cobranzas/mesa-gestion', version: '1' })
export class MesaGestionController {
  constructor(private readonly service: MesaGestionService) {}

  @Get('worklist')
  @RequirePermission('COBRANZAS', 'COB_MG_WORKLIST_VER')
  @ApiOperation({ summary: 'Worklist priorizada de clientes morosos para el gestor de oficina' })
  worklist(@Query() query: QueryMesaGestionDto, @GetUser() user: LoginUserInfo) {
    return this.service.getWorklist(user.empresa_id, query, user.id);
  }

  @Get('worklist/export')
  @RequirePermission('COBRANZAS', 'COB_MG_EXPORTAR')
  @ApiOperation({ summary: 'Worklist completa para export Excel (sin paginar; máx 20k filas)' })
  worklistExport(@Query() query: QueryMesaGestionDto, @GetUser() user: LoginUserInfo) {
    return this.service.getWorklistFull(user.empresa_id, query, user.id);
  }

  @Get('resumen')
  @RequirePermission('COBRANZAS', 'COB_MG_WORKLIST_VER')
  @ApiOperation({ summary: 'KPIs de la mesa de gestión (totales, sin gestión, tramos de mora)' })
  resumen(@GetUser() user: LoginUserInfo) {
    return this.service.getResumen(user.empresa_id);
  }
}
