import { Body, Controller, Post, Req, UseGuards } from '@nestjs/common';
import { ApiOperation, ApiSecurity, ApiTags } from '@nestjs/swagger';
import type { Request } from 'express';
import { ApiKeyGuard, getApiContext } from './api-key.guard';
import {
  NotificarCobroDto,
  RegistrarGestionExternaDto,
  SyncCarteraDto,
} from './api-publica.dto';
import { ApiPublicaService } from './api-publica.service';

@ApiTags('Cartera Inteligente — API Pública')
@ApiSecurity('X-Api-Key')
@UseGuards(ApiKeyGuard)
@Controller({ path: 'cartera/api', version: '1' })
export class ApiPublicaController {
  constructor(private readonly service: ApiPublicaService) {}

  @Post('sync')
  @ApiOperation({ summary: 'Sincronizar cartera (snapshot o delta)' })
  sync(@Body() dto: SyncCarteraDto, @Req() req: Request) {
    return this.service.sync(getApiContext(req), dto);
  }

  @Post('cobros')
  @ApiOperation({ summary: 'Notificar un cobro registrado en el sistema externo' })
  notificarCobro(@Body() dto: NotificarCobroDto, @Req() req: Request) {
    return this.service.notificarCobro(getApiContext(req), dto);
  }

  @Post('gestiones')
  @ApiOperation({ summary: 'Registrar una gestión desde el sistema externo' })
  registrarGestion(@Body() dto: RegistrarGestionExternaDto, @Req() req: Request) {
    return this.service.registrarGestion(getApiContext(req), dto);
  }
}
