<?php

declare(strict_types=1);

use App\Models\Finding;
use App\Models\OperationRun;
use App\Models\ManagedEnvironment;
use App\Support\Workspaces\WorkspaceContext;
use Carbon\CarbonImmutable;
use Illuminate\Support\Facades\DB;

afterEach(function (): void {
    CarbonImmutable::setTestNow();
});

it('renders the workspace overview DB-only with bounded query volume for representative visible-tenant scenarios', function (): void {
    CarbonImmutable::setTestNow(CarbonImmutable::create(2026, 4, 9, 9, 0, 0, 'UTC'));

    $tenantA = ManagedEnvironment::factory()->create(['status' => 'active']);
    [$user, $tenantA] = createUserWithTenant($tenantA, role: 'owner', workspaceRole: 'readonly');
    workspaceOverviewSeedQuietTenantTruth($tenantA);

    Finding::factory()->for($tenantA)->create([
        'workspace_id' => (int) $tenantA->workspace_id,
        'status' => Finding::STATUS_TRIAGED,
        'due_at' => now()->subDay(),
    ]);

    $tenantB = ManagedEnvironment::factory()->create([
        'status' => 'active',
        'workspace_id' => (int) $tenantA->workspace_id,
        'name' => 'Second ManagedEnvironment',
    ]);
    createUserWithTenant($tenantB, $user, role: 'owner', workspaceRole: 'readonly');
    workspaceOverviewSeedQuietTenantTruth($tenantB);
    workspaceOverviewSeedHealthyBackup($tenantB, [
        'completed_at' => now()->subDays(2),
    ]);

    $tenantC = ManagedEnvironment::factory()->create([
        'status' => 'active',
        'workspace_id' => (int) $tenantA->workspace_id,
        'name' => 'Third ManagedEnvironment',
    ]);
    createUserWithTenant($tenantC, $user, role: 'owner', workspaceRole: 'readonly');
    workspaceOverviewSeedQuietTenantTruth($tenantC);
    $tenantCBackup = workspaceOverviewSeedHealthyBackup($tenantC, [
        'completed_at' => now()->subMinutes(20),
    ]);
    workspaceOverviewSeedRestoreHistory($tenantC, $tenantCBackup, 'follow_up');

    OperationRun::factory()->create([
        'managed_environment_id' => (int) $tenantC->getKey(),
        'workspace_id' => (int) $tenantC->workspace_id,
        'status' => \App\Support\OperationRunStatus::Running->value,
        'outcome' => \App\Support\OperationRunOutcome::Pending->value,
    ]);

    DB::flushQueryLog();
    DB::enableQueryLog();

    $this->actingAs($user);

    assertNoOutboundHttp(function () use ($tenantA): void {
        $this->withSession([WorkspaceContext::SESSION_KEY => (int) $tenantA->workspace_id])
            ->get(route('admin.workspace.home', ['workspace' => $tenantA->workspace]))
            ->assertOk()
            ->assertSee('Governance attention')
            ->assertSee('Backup attention')
            ->assertSee('Recovery attention')
            ->assertSee('Recent operations');
    });

    expect(count(DB::getQueryLog()))->toBeLessThanOrEqual(140);
});
