<?php

declare(strict_types=1);

use Illuminate\Support\Collection;
use Tests\Support\TestLaneManifest;
use Tests\Support\TestLaneBudget;

it('routes escalated workflow, discovery-heavy, and broad surface-guard families into heavy-governance', function (): void {
    $lane = TestLaneManifest::lane('heavy-governance');
    $files = new Collection(TestLaneManifest::discoverFiles('heavy-governance'));

    expect($lane['includedFamilies'])->toContain('ui-workflow', 'surface-guard', 'discovery-heavy')
        ->and($files)->toContain(
            'tests/Architecture/PlatformVocabularyBoundaryGuardTest.php',
            'tests/Architecture/ReasonTranslationPrimarySurfaceGuardTest.php',
            'tests/Deprecation/IsPlatformSuperadminDeprecationTest.php',
            'tests/Feature/Drift/DriftBulkAcknowledgeAllMatchingConfirmationTest.php',
            'tests/Feature/Filament/BaselineActionAuthorizationTest.php',
            'tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php',
            'tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php',
            'tests/Feature/Findings/FindingBulkActionsTest.php',
            'tests/Feature/Findings/FindingExceptionRenewalTest.php',
            'tests/Feature/Findings/FindingsListFiltersTest.php',
            'tests/Feature/Findings/FindingWorkflowRowActionsTest.php',
            'tests/Feature/Findings/FindingWorkflowViewActionsTest.php',
            'tests/Feature/Filament/WorkspaceOnlySurfaceTenantIndependenceTest.php',
            'tests/Feature/Guards/ActionSurfaceContractTest.php',
            'tests/Feature/Filament/PolicyResourceAdminSearchParityTest.php',
            'tests/Feature/Filament/PolicyVersionAdminSearchParityTest.php',
            'tests/Feature/Rbac/BackupItemsRelationManagerUiEnforcementTest.php',
            'tests/Feature/Rbac/WorkspaceMembershipsRelationManagerUiEnforcementTest.php',
            'tests/Feature/SettingsFoundation/WorkspaceSettingsManageTest.php',
            'tests/Feature/Filament/EnvironmentReviewHeaderDisciplineTest.php',
            'tests/Feature/Filament/PanelNavigationSegregationTest.php',
        );
});

it('keeps the heavy-governance command config-driven and free of retained confidence workflows', function (): void {
    $command = TestLaneManifest::buildCommand('heavy-governance');
    $files = TestLaneManifest::discoverFiles('heavy-governance');
    $configurationPath = TestLaneManifest::laneConfigurationPath('heavy-governance');
    $configurationContents = (string) file_get_contents(TestLaneManifest::absolutePath($configurationPath));

    expect(TestLaneManifest::commandRef('heavy-governance'))->toBe('test:heavy')
        ->and($command)->toContain('--configuration='.$configurationPath)
        ->and($command)->toContain('--testsuite=Lane')
        ->and($configurationContents)->toContain('tests/Feature/Drift/DriftBulkAcknowledgeAllMatchingConfirmationTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Filament/BaselineActionAuthorizationTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Findings/FindingBulkActionsTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Findings/FindingExceptionRenewalTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Findings/FindingsListFiltersTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Findings/FindingWorkflowRowActionsTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Findings/FindingWorkflowViewActionsTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Filament/WorkspaceOnlySurfaceTenantIndependenceTest.php')
        ->and($configurationContents)->toContain('tests/Feature/SettingsFoundation/WorkspaceSettingsManageTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Guards/ActionSurfaceContractTest.php')
        ->and($configurationContents)->toContain('tests/Feature/Filament/PolicyResourceAdminSearchParityTest.php')
        ->and($files)->not->toContain(
            'tests/Feature/Baselines/BaselineCompareMatrixCompareAllActionTest.php',
            'tests/Feature/Baselines/BaselineCompareMatrixBuilderTest.php',
            'tests/Feature/Rbac/OnboardingWizardUiEnforcementTest.php',
            'tests/Feature/Filament/BackupSetAdminTenantParityTest.php',
        );
});

it('keeps heavy-governance hotspot ownership honest across slimmed, retained, and follow-up families', function (): void {
    $inventory = collect(TestLaneManifest::heavyGovernanceHotspotInventory())->keyBy('familyId');
    $decomposition = collect(TestLaneManifest::heavyGovernanceDecompositionRecords())->keyBy('familyId');
    $decisions = collect(TestLaneManifest::heavyGovernanceSlimmingDecisions())->keyBy('familyId');
    $outcome = TestLaneManifest::heavyGovernanceBudgetOutcome();

    expect($inventory->keys()->all())->toEqual([
        'baseline-profile-start-surfaces',
        'action-surface-contract',
        'ops-ux-governance',
        'findings-workflow-surfaces',
        'finding-bulk-actions-workflow',
        'workspace-settings-slice-management',
    ])
        ->and($inventory->get('baseline-profile-start-surfaces')['status'])->toBe('slimmed')
        ->and($inventory->get('findings-workflow-surfaces')['status'])->toBe('slimmed')
        ->and($inventory->get('finding-bulk-actions-workflow')['status'])->toBe('slimmed')
        ->and($inventory->get('action-surface-contract')['status'])->toBe('retained')
        ->and($inventory->get('ops-ux-governance')['status'])->toBe('retained')
        ->and($inventory->get('workspace-settings-slice-management')['status'])->toBe('follow-up')
        ->and($decomposition->get('finding-bulk-actions-workflow')['recommendedAction'])->toBe('narrow-assertions')
        ->and($decisions->get('finding-bulk-actions-workflow')['decisionType'])->toBe('trim-duplicate-work')
        ->and($decisions->get('workspace-settings-slice-management')['decisionType'])->toBe('follow-up')
        ->and($outcome['remainingOpenFamilies'])->toEqualCanonicalizing([
            'action-surface-contract',
            'ops-ux-governance',
            'workspace-settings-slice-management',
        ]);
});

it('keeps heavy-governance manual runs warning-first and scheduled runs trend-only while schedules mature', function (): void {
    $manualProfile = TestLaneBudget::enforcementProfile('heavy-governance', 'manual');
    $scheduledProfile = TestLaneBudget::enforcementProfile('heavy-governance', 'scheduled');
    $manualEvaluation = TestLaneBudget::evaluateLaneForTrigger('heavy-governance', 'manual', (float) $manualProfile['effectiveThresholdSeconds'] + 1.0);
    $scheduledEvaluation = TestLaneBudget::evaluateLaneForTrigger('heavy-governance', 'scheduled', (float) $scheduledProfile['effectiveThresholdSeconds'] + 1.0);

    expect($manualProfile['thresholdSource'])->toBe('governance-contract')
        ->and($manualProfile['enforcementMode'])->toBe('soft-warn')
        ->and($scheduledProfile['enforcementMode'])->toBe('trend-only')
        ->and($manualEvaluation['blockingStatus'])->toBe('non-blocking-warning')
        ->and($scheduledEvaluation['blockingStatus'])->toBe('informational');
});