import { Body, Controller, Get, Param, Post, UseGuards, UseInterceptors } 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 { IdempotencyInterceptor } from '../common/idempotency.interceptor';
import { AlertasClienteService } from './alertas-cliente.service';
import { CrearGestionMobileDto } from './dto/crear-gestion-mobile.dto';
import { MobileGestionesService } from './mobile-gestiones.service';

@ApiTags('Mobile · Gestiones de cobranza')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
@Controller({ path: 'mobile', version: '1' })
export class MobileGestionesController {
  constructor(
    private readonly service: MobileGestionesService,
    private readonly alertas: AlertasClienteService,
  ) {}

  @Post('gestiones')
  @UseInterceptors(IdempotencyInterceptor)
  @ApiOperation({
    summary:
      'Registrar resultado de visita / llamada (No atiende, Ausente, Rechazo, Promesa, etc.). Idempotente.',
  })
  crear(@GetUser() user: LoginUserInfo, @Body() dto: CrearGestionMobileDto) {
    return this.service.crear(user.empresa_id, user.id, dto);
  }

  @Get('gestiones/proximas')
  @ApiOperation({ summary: 'Mi agenda de hoy: gestiones con próxima_fecha agendada' })
  proximas(@GetUser() user: LoginUserInfo) {
    return this.service.misProximas(user.empresa_id, user.id);
  }

  @Get('clientes/:id/alertas')
  @ApiOperation({
    summary:
      'Alertas críticas del cliente antes de cobrar: mora legal, refinanciación activa, promesas',
  })
  alertasCliente(@GetUser() user: LoginUserInfo, @Param('id') id: string) {
    return this.alertas.getAlertas(user.empresa_id, id);
  }
}
