<?php

declare(strict_types=1);

namespace App\Listeners;

use App\Events\PaymentRegistered;
use App\Events\PaymentReversed;
use App\Jobs\SyncCreditStatusJob;

/**
 * Listener que despacha el Job asíncrono de sincronización de estado
 * tras operaciones de pago.
 *
 * Cambio arquitectónico: anteriormente llamaba sync() de forma síncrona
 * dentro del request HTTP de pago, bloqueando el worker de PHP-FPM hasta
 * que terminaba la resolución y persistencia del estado.
 *
 * Ahora solo transmite el credit_id al Job (payload mínimo), liberando
 * inmediatamente el worker. El Job hace el fresh read con installments
 * y resuelve el estado en background.
 *
 * Escucha:
 * - PaymentRegistered : cuando se registra un nuevo pago
 * - PaymentReversed   : cuando se revierte/anula un pago
 */
class RefreshCreditStatusListener
{
    public function handlePaymentRegistered(PaymentRegistered $event): void
    {
        SyncCreditStatusJob::dispatch($event->credit->id);
    }

    public function handlePaymentReversed(PaymentReversed $event): void
    {
        SyncCreditStatusJob::dispatch($event->credit->id);
    }
}
