<?php

declare(strict_types=1);

use App\Filament\Resources\BackupSetResource;
use App\Models\BackupItem;
use App\Models\BackupSet;
use Filament\Facades\Filament;
use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);

it('shows lifecycle status separately from backup quality on the backup-set list', function (): void {
    [$user, $tenant] = createUserWithTenant(role: 'owner');

    $this->actingAs($user);
    Filament::setTenant($tenant, true);

    $fullSet = BackupSet::factory()->for($tenant)->create([
        'name' => 'Full quality set',
        'status' => 'completed',
        'item_count' => 1,
    ]);

    BackupItem::factory()->for($tenant)->for($fullSet)->create([
        'payload' => ['id' => 'policy-full'],
        'metadata' => [],
        'assignments' => [],
    ]);

    $degradedSet = BackupSet::factory()->for($tenant)->create([
        'name' => 'Degraded quality set',
        'status' => 'completed',
        'item_count' => 2,
    ]);

    BackupItem::factory()->for($tenant)->for($degradedSet)->create([
        'payload' => [],
        'metadata' => [
            'source' => 'metadata_only',
            'assignments_fetch_failed' => true,
        ],
        'assignments' => [],
    ]);

    BackupItem::factory()->for($tenant)->for($degradedSet)->create([
        'payload' => ['id' => 'policy-warning'],
        'metadata' => [
            'has_orphaned_assignments' => true,
            'integrity_warning' => 'Protected values are intentionally hidden.',
        ],
        'assignments' => [],
    ]);

    $this->get(BackupSetResource::getUrl('index', tenant: $tenant))
        ->assertOk()
        ->assertSee('Backup quality')
        ->assertSee('Full quality set')
        ->assertSee('No degradations detected across 1 item')
        ->assertSee('Degraded quality set')
        ->assertSee('2 degraded items')
        ->assertSee('1 metadata-only')
        ->assertSee('1 assignment issue')
        ->assertSee('Completed');
});
