<?php

namespace App\Livewire\Admin;

use App\Models\Host;
use LivewireUI\Modal\ModalComponent;

/**
 * Bestätigung fürs Lösen einer Host-Reservierung (R23).
 *
 * Mutiert nichts selbst: "der Kunde verliert seine eigene Maschine" bleibt an
 * der Stelle geprüft und ausgeführt, an der sie schon steht —
 * HostDetail::releaseReservation(). Der Bestätigen-Knopf löst nur das
 * Ereignis aus, das die Seiten-Komponente per #[On(...)] auffängt und
 * weiterreicht — dieselbe Berechtigungsprüfung bleibt an der einen Stelle,
 * statt sie hier zu verdoppeln.
 */
class ConfirmReleaseReservation extends ModalComponent
{
    public string $uuid;

    public string $hostName = '';

    public string $customerName = '';

    public function mount(string $uuid): void
    {
        // Ein Modal ist ohne die Route-Middleware der Seite erreichbar (R20),
        // und zeigt hier den Namen des Kunden, der die Maschine verliert.
        $this->authorize('hosts.manage');

        $host = Host::query()->where('uuid', $uuid)->with('reservedFor')->first();

        $this->uuid = $uuid;
        $this->hostName = $host?->name ?? '';
        $this->customerName = $host?->reservedFor?->name ?? '';
    }

    public function confirmRelease(): void
    {
        $this->authorize('hosts.manage');
        $this->dispatch('host-reservation-release-confirmed');
        $this->closeModal();
    }

    public function render()
    {
        return view('livewire.admin.confirm-release-reservation');
    }
}
