<?php

declare(strict_types=1);

use App\Filament\Resources\BaselineProfileResource;
use App\Filament\Resources\BaselineSnapshotResource;
use App\Models\BaselineProfile;
use App\Models\BaselineSnapshot;
use App\Support\Workspaces\WorkspaceContext;

it('shows effective and latest baseline truth separately on the baseline profile detail page', function (): void {
    [$user, $tenant] = createUserWithTenant(role: 'owner');

    $profile = BaselineProfile::factory()->active()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'name' => 'Security Baseline',
    ]);

    $currentSnapshot = BaselineSnapshot::factory()->complete()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'baseline_profile_id' => (int) $profile->getKey(),
        'captured_at' => now()->subHour(),
        'completed_at' => now()->subHour(),
    ]);

    $latestAttempt = BaselineSnapshot::factory()->incomplete()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'baseline_profile_id' => (int) $profile->getKey(),
        'captured_at' => now(),
    ]);

    $profile->update(['active_snapshot_id' => (int) $currentSnapshot->getKey()]);
    session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id);

    $this->actingAs($user)
        ->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin'))
        ->assertOk()
        ->assertSee('Baseline truth')
        ->assertSee('Current snapshot')
        ->assertSee('Snapshot #'.$currentSnapshot->getKey().' (Complete)')
        ->assertSee('Latest attempt')
        ->assertSee('Snapshot #'.$latestAttempt->getKey().' (Incomplete)')
        ->assertSee('Compare readiness')
        ->assertSee('No eligible compare target')
        ->assertSee('Assign this baseline to an environment you can compare, or use an account with access to an assigned environment.');
});

it('shows compare readiness as ready when a consumable snapshot and eligible target tenant exist', function (): void {
    [$user, $tenant] = createUserWithTenant(role: 'owner');

    $profile = BaselineProfile::factory()->active()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'name' => 'Security Baseline',
    ]);

    $currentSnapshot = BaselineSnapshot::factory()->complete()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'baseline_profile_id' => (int) $profile->getKey(),
        'captured_at' => now()->subHour(),
        'completed_at' => now()->subHour(),
    ]);

    $profile->update(['active_snapshot_id' => (int) $currentSnapshot->getKey()]);

    \App\Models\BaselineTenantAssignment::factory()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'managed_environment_id' => (int) $tenant->getKey(),
        'baseline_profile_id' => (int) $profile->getKey(),
    ]);

    session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id);

    $this->actingAs($user)
        ->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin'))
        ->assertOk()
        ->assertSee('Compare readiness')
        ->assertSee('Ready')
        ->assertSee('No action needed.');
});

it('shows lifecycle and current-truth state across baseline snapshot list and detail surfaces', function (): void {
    [$user, $tenant] = createUserWithTenant(role: 'owner');

    $profile = BaselineProfile::factory()->active()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'name' => 'Security Baseline',
    ]);

    $historicalSnapshot = BaselineSnapshot::factory()->complete()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'baseline_profile_id' => (int) $profile->getKey(),
        'captured_at' => now()->subDay(),
        'completed_at' => now()->subDay(),
    ]);

    $currentSnapshot = BaselineSnapshot::factory()->complete()->create([
        'workspace_id' => (int) $tenant->workspace_id,
        'baseline_profile_id' => (int) $profile->getKey(),
        'captured_at' => now(),
        'completed_at' => now(),
    ]);

    $profile->update(['active_snapshot_id' => (int) $currentSnapshot->getKey()]);
    session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id);

    $this->actingAs($user)
        ->get(BaselineSnapshotResource::getUrl(panel: 'admin'))
        ->assertOk()
        ->assertSee('Outcome')
        ->assertSee('Historical artifact')
        ->assertSee('Trustworthy artifact')
        ->assertDontSee('Current truth');

    $this->actingAs($user)
        ->get(BaselineSnapshotResource::getUrl('view', ['record' => $historicalSnapshot], panel: 'admin'))
        ->assertOk()
        ->assertSee('Outcome summary')
        ->assertSee('Snapshot status')
        ->assertSee('Historical trace')
        ->assertSee('Superseded')
        ->assertDontSee('Artifact truth');
});
