<?php

namespace App\Listeners;

use App\Events\OrdenLavanderiaTerminada;
use App\Mail\OrdenLavanderiaListaCliente;
use App\Models\NotificacionLog;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Throwable;

class EnviarCorreoOrdenLavanderiaListaCliente implements ShouldQueue
{
    public function handle(OrdenLavanderiaTerminada $event): void
    {
        $email = $event->orden->cliente_email;

        if (!$email) {
            return;
        }

        try {
            Mail::to($email)->send(new OrdenLavanderiaListaCliente($event->orden));
            NotificacionLog::create([
                'orden_lavanderia_id' => $event->orden->id,
                'tipo' => 'lista_cliente',
                'destinatario' => $email,
                'enviado_at' => now(),
                'estado' => NotificacionLog::ESTADO_ENVIADO,
            ]);
        } catch (Throwable $e) {
            NotificacionLog::create([
                'orden_lavanderia_id' => $event->orden->id,
                'tipo' => 'lista_cliente',
                'destinatario' => $email,
                'enviado_at' => now(),
                'estado' => NotificacionLog::ESTADO_FALLIDO,
                'mensaje_error' => $e->getMessage(),
            ]);
            Log::warning('No se pudo enviar correo lista_cliente; se omite en este entorno.', [
                'orden_lavanderia_id' => $event->orden->id,
                'destinatario' => $email,
                'error' => $e->getMessage(),
            ]);
        }
    }
}

