import { Controller, Get, Param, Query, 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 { CarteraIaService } from './cartera-ia.service';

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

  @Get(':id/recomendacion')
  @RequirePermission('COBRANZAS', 'COB_CART_VER')
  @ApiOperation({
    summary: 'Recomendación IA de contacto (canal sugerido + mensaje + razonamiento)',
    description: 'Cacheado 24h por cliente. Pasar ?refresh=true para regenerar.',
  })
  recomendacion(
    @Param('id') id: string,
    @Query('refresh') refresh: string | undefined,
    @GetUser() user: LoginUserInfo,
  ) {
    return this.service.recomendarContacto(user.empresa_id, id, {
      forceRefresh: refresh === 'true',
    });
  }

  @Get(':id/informe-ejecutivo')
  @RequirePermission('COBRANZAS', 'COB_CART_VER')
  @ApiOperation({
    summary: 'Informe ejecutivo IA (perfil + evolución + riesgo + acciones + oportunidades)',
    description: 'Narrativa estructurada. Cacheado 24h. Pasar ?refresh=true para regenerar.',
  })
  informeEjecutivo(
    @Param('id') id: string,
    @Query('refresh') refresh: string | undefined,
    @GetUser() user: LoginUserInfo,
  ) {
    return this.service.informeEjecutivo(user.empresa_id, id, {
      forceRefresh: refresh === 'true',
    });
  }
}
