<?php

declare(strict_types=1);

namespace App\Events;

use App\Models\Credit;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

/**
 * Evento interno disparado por CreditStatusSyncService cuando persiste
 * exitosamente un cambio de estado en un crédito.
 *
 * Propósito: desacoplar la lógica de estado de la lógica de orden de cobro.
 * Lo escucha CollectorSyncListener → CollectorSyncService para mantener
 * collector_credit_order sincronizado con los estados activos.
 *
 * Es síncrono (no implementa ShouldBroadcast), por lo que sus listeners
 * se ejecutan en el mismo proceso que el Job que hizo el sync.
 */
class CreditStatusSynced
{
    use Dispatchable, SerializesModels;

    public function __construct(
        public readonly Credit $credit,
        public readonly string $oldStatus,
        public readonly string $newStatus,
    ) {}
}
