<?php

namespace App\Livewire\Environments;

use LivewireUI\Modal\ModalComponent;

/**
 * El resultado de una sincronización fallida, a la cara.
 *
 * **Por qué existe.** El fallo se contaba con un `session()->flash('error')`, y pasó lo
 * previsible: la pantalla de entornos solo pintaba el flash de éxito, así que pulsar
 * «Sincronizar» y que fallara se veía **igual que si no pasara nada** —la fecha seguía en
 * su sitio y ningún mensaje decía por qué—. Ocurrió de verdad con un Moodle local: la
 * causa (certificado autofirmado) estaba solo en `storage/logs/api-*.log`.
 *
 * Arreglar el flash era necesario pero no suficiente: un banner arriba de una lista larga
 * de tarjetas se pierde, y aquí el mensaje trae un detalle técnico que hay que poder
 * leer y copiar. Una modal no se puede ignorar.
 *
 * El **detalle técnico se muestra**, al contrario que en los errores de la API pública
 * (MGR-034): esto es un panel interno, y es un sistema nuestro hablando con el de un
 * cliente. Sin el `cURL error 60` no hay forma de saber que el problema es el
 * certificado y no el token.
 */
class SyncResultModal extends ModalComponent
{
    public string $dominio = '';
    public string $mensaje = '';
    public ?string $detalle = null;

    public function mount(string $dominio, string $mensaje, ?string $detalle = null): void
    {
        // Quien ha podido pulsar el botón puede ver por qué ha fallado.
        $this->authorize('admin.environments.refresh');

        $this->dominio = $dominio;
        $this->mensaje = $mensaje;
        $this->detalle = $detalle;
    }

    public static function modalMaxWidth(): string
    {
        return '2xl';
    }

    public function render()
    {
        return view('livewire.environments.sync-result-modal');
    }
}
