<?php

use App\Models\Operator;

/**
 * Was „nicht entfernbar" heisst, muss auch wirklich nicht entfernbar sein.
 *
 * In der Konsole standen alle Eintraege aus TRUSTED_RANGES untereinander mit
 * demselben Vermerk „Management-VPN, nicht entfernbar" — auch eine Bueroadresse,
 * die jemand einmal in die .env geschrieben hatte. Der Betreiber konnte sie
 * damit nicht aendern und wusste nicht einmal, dass sie aus einer Datei kommt.
 * Beim naechsten Umzug des Buero-Anschlusses waere das ein Aussperren gewesen.
 */
it('nennt eine von Hand eingetragene Adresse nicht unveraenderlich', function () {
    config()->set('admin_access.trusted_ranges', ['10.66.0.0/24', '127.0.0.1', '62.178.50.33']);
    config()->set('admin_access.structural_ranges', ['10.66.0.0/24', '127.0.0.1']);

    $html = $this->actingAs(admin(), 'operator')
        ->get(route('admin.settings', ['tab' => 'security']))
        ->assertOk()
        ->getContent();

    // Der Vermerk „nicht entfernbar" darf nicht mehr auf die Bueroadresse
    // zutreffen — sie steht in der Warnzeile, mit dem Weg heraus.
    expect($html)->toContain(__('admin_settings.console_env_note'))
        ->and($html)->toContain('62.178.50.33');
});

it('laesst die zwei strukturellen Eintraege in Ruhe', function () {
    config()->set('admin_access.trusted_ranges', ['10.66.0.0/24', '127.0.0.1']);

    $html = $this->actingAs(admin(), 'operator')
        ->get(route('admin.settings', ['tab' => 'security']))
        ->assertOk()
        ->getContent();

    expect($html)->toContain(__('admin_settings.console_vpn_note'))
        // Ohne handgemachte Eintraege gibt es auch nichts zu warnen.
        ->and($html)->not->toContain(__('admin_settings.console_env_note'));
});

it('nennt einen Host-Zugang so, wie der Host heute heisst', function () {
    // Ein Zugang bekommt seinen Namen einmal beim Anlegen. Wird der Host spaeter
    // umbenannt, zeigte die Liste weiter den alten: „pve-fns-1" neben einem
    // Host, der laengst „fsn-01" hiess. Zwei Namen fuer dieselbe Maschine.
    $host = \App\Models\Host::factory()->create(['name' => 'fsn-01']);
    \App\Models\VpnPeer::factory()->create([
        'host_id' => $host->id,
        'name' => 'pve-fns-1',
        'kind' => 'host',
    ]);

    $html = $this->actingAs(admin(), 'operator')->get(route('admin.vpn'))->assertOk()->getContent();

    expect($html)->toContain('fsn-01')
        ->and($html)->not->toContain('pve-fns-1');
});
