<?php

namespace App\Livewire;

use App\Livewire\Concerns\ResolvesCustomer;
use App\Models\SecurityBlock;
use LivewireUI\Modal\ModalComponent;

/**
 * Bestaetigung vorm Aufheben einer eigenen Sperre (R23).
 *
 * Mutiert nichts: Security::onReleaseConfirmed() bleibt die einzige Stelle,
 * die tatsaechlich freigibt — und die eigene Pruefung dort wiederholt genau
 * das, was hier schon steht, weil ein Modal ohne die Route-Middleware der
 * Seite erreichbar ist (R20). Deshalb loest auch dieses Modal den Kunden
 * selbst auf, statt der uebergebenen uuid zu vertrauen, und zeigt bei einer
 * fremden oder einer Host-Sperre lieber 404 als deren Adresse.
 */
class ConfirmReleaseBlock extends ModalComponent
{
    use ResolvesCustomer;

    public string $uuid;

    public string $ip = '';

    public function mount(string $uuid): void
    {
        $customer = $this->customer();

        $block = SecurityBlock::query()
            ->where('uuid', $uuid)
            ->whereHas('instance', fn ($q) => $q->where('customer_id', $customer?->id))
            ->first();

        abort_if($block === null, 404);

        $this->uuid = $uuid;
        $this->ip = $block->ip;
    }

    public function confirm(): void
    {
        $this->dispatch('block-release-confirmed', uuid: $this->uuid);
        $this->closeModal();
    }

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