import { Injectable, Logger } from '@nestjs/common';
import { compra_asistida_estado } from '@prisma/client';
import { PrismaService } from 'src/prisma/prisma.service';

// Hook que se dispara tras confirmar un pago (mock o real).
// Avanza el estado del documento origen según origen_modulo.
@Injectable()
export class BancardPostPagoHook {
  private readonly logger = new Logger(BancardPostPagoHook.name);

  constructor(private readonly prisma: PrismaService) {}

  async procesar(pagoId: string): Promise<void> {
    const pago = await this.prisma.pago_bancard.findUnique({ where: { id: pagoId } });
    if (!pago || pago.estado !== 'aprobado') return;

    if (pago.origen_modulo === 'compra_asistida' && pago.origen_id) {
      await this.procesarCompraAsistida(pago.origen_id, pago.id);
    }
    // Otros módulos se agregan acá cuando se integren
  }

  private async procesarCompraAsistida(caId: string, pagoId: string) {
    const ca = await this.prisma.compra_asistida.findUnique({ where: { id: caId } });
    if (!ca) { this.logger.warn(`CA ${caId} no encontrada para post-pago`); return; }
    if (ca.estado !== 'cotizado') { this.logger.warn(`CA ${caId} en estado ${ca.estado}, no se avanza`); return; }

    await this.prisma.compra_asistida.update({
      where: { id: caId },
      data: {
        estado: compra_asistida_estado.pago_recibido,
        pago_bancard_id: pagoId,
        updated_at: new Date(),
      },
    });

    this.logger.log(`CA ${caId} → pago_recibido (pago ${pagoId})`);
  }
}
