<?php

use Illuminate\Database\Migrations\Migration;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;

/**
 * `server.terminal` — eine Root-Schale auf dem CluPilot-Server selbst öffnen.
 *
 * NICHT `hosts.manage`, obwohl das Host-Terminal daran hängt. Ein Host-Terminal
 * reicht auf eine Maschine; dieses reicht auf alles — Datenbank, Tresor,
 * DNS-Token, jede Kundeninstanz. Wer es hat, hat die Plattform. Dieselbe
 * Fähigkeit für beides hieße, dass jeder, der einen Host neu starten darf,
 * nebenbei die Steuerungsebene bekommt.
 *
 * NUR Owner, anders als bei den meisten Fähigkeiten hier. Weitergeben kann sie
 * trotzdem nur er selbst: der Rollen-Editor liegt hinter `staff.manage`, und
 * das hat heute allein die Owner-Rolle. Sie steht damit im Editor, ist also
 * delegierbar, wenn der Betreiber das ausdrücklich will — und niemand sonst
 * kann es für ihn entscheiden.
 *
 * Guard `operator`: jede Fähigkeit dieser Anwendung liegt dort seit 2026-07-29
 * (siehe move_rbac_to_operator_guard) — eine unter `web` angelegte träfe still
 * überhaupt niemanden.
 */
return new class extends Migration
{
    public function up(): void
    {
        app(PermissionRegistrar::class)->forgetCachedPermissions();

        Permission::findOrCreate('server.terminal', 'operator');
        Role::findOrCreate('Owner', 'operator')->givePermissionTo('server.terminal');

        app(PermissionRegistrar::class)->forgetCachedPermissions();
    }

    public function down(): void
    {
        app(PermissionRegistrar::class)->forgetCachedPermissions();
        Permission::query()->where('name', 'server.terminal')->where('guard_name', 'operator')->delete();
        app(PermissionRegistrar::class)->forgetCachedPermissions();
    }
};
