<?php

declare(strict_types=1);

use App\Filament\Pages\Operations\TenantlessOperationRunViewer;
use App\Models\BackupSet;
use App\Models\OperationRun;
use App\Models\RestoreRun;
use App\Support\OperationRunOutcome;
use App\Support\OperationRunStatus;
use Filament\Facades\Filament;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Livewire;

uses(RefreshDatabase::class);

it('shows restore continuation truth and deep link for restore-linked operation runs', function (): void {
    [$user, $tenant] = createUserWithTenant(role: 'owner');
    $this->actingAs($user);

    $backupSet = BackupSet::factory()->create([
        'managed_environment_id' => $tenant->id,
    ]);

    $operationRun = OperationRun::factory()->create([
        'managed_environment_id' => (int) $tenant->getKey(),
        'workspace_id' => (int) $tenant->workspace_id,
        'user_id' => (int) $user->getKey(),
        'type' => 'restore.execute',
        'status' => OperationRunStatus::Completed->value,
        'outcome' => OperationRunOutcome::Succeeded->value,
        'context' => [],
    ]);

    $restoreRun = RestoreRun::factory()->create([
        'managed_environment_id' => $tenant->id,
        'backup_set_id' => $backupSet->id,
        'operation_run_id' => $operationRun->id,
        'status' => 'completed',
        'results' => [
            'foundations' => [],
            'items' => [
                1 => [
                    'status' => 'applied',
                    'policy_identifier' => 'policy-1',
                    'assignment_outcomes' => [
                        ['status' => 'skipped', 'assignment' => []],
                    ],
                ],
            ],
        ],
        'metadata' => [
            'non_applied' => 1,
        ],
    ]);

    $operationRun->update([
        'context' => [
            'restore_run_id' => (int) $restoreRun->getKey(),
        ],
    ]);

    Filament::setTenant(null, true);

    Livewire::actingAs($user)
        ->withQueryParams([])
        ->test(TenantlessOperationRunViewer::class, ['run' => $operationRun])
        ->assertSee('Restore continuation')
        ->assertSee('Follow-up required')
        ->assertSee('ManagedEnvironment-wide recovery is not proven.')
        ->assertSee('Open restore run');
});
