import { Body, Controller, Get, Param, Post, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import type { LoginUserInfo } from '../../auth/dto/login.dto';
import { RequireModule, RequirePermission } from '../../auth/decorators';
import { ModuleGuard } from '../../auth/guards/module.guard';
import { PermissionGuard } from '../../auth/guards/permission.guard';
import { GetUser } from '../../auth/get-user.decorator';
import { RegistrarGestionDto } from '../dto/registrar-gestion.dto';
import { GestionesCarteraService } from './gestiones.service';

@ApiTags('Cartera Inteligente — Gestiones')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('COBRANZAS')
@Controller({ path: 'cartera/cuentas', version: '1' })
export class GestionesCarteraController {
  constructor(private readonly service: GestionesCarteraService) {}

  @Post(':id/gestiones')
  @RequirePermission('COBRANZAS', 'COB_CART_VER')
  @ApiOperation({ summary: 'Registrar gestión sobre una cuenta' })
  registrar(
    @Param('id') cuentaId: string,
    @Body() dto: RegistrarGestionDto,
    @GetUser() user: LoginUserInfo,
  ) {
    return this.service.registrar(user.empresa_id, user.id, cuentaId, dto);
  }

  @Get(':id/gestiones')
  @RequirePermission('COBRANZAS', 'COB_CART_VER')
  @ApiOperation({ summary: 'Historial de gestiones de la cuenta' })
  historial(@Param('id') cuentaId: string, @GetUser() user: LoginUserInfo) {
    return this.service.historial(user.empresa_id, cuentaId);
  }
}
