<?php

use App\Filament\Resources\FindingResource\Pages\ListFindings;
use App\Models\Finding;
use Filament\Facades\Filament;
use Livewire\Livewire;

test('triage all matching respects scope key filter', function () {
    [$user, $tenant] = createUserWithTenant(role: 'manager');
    $this->actingAs($user);
    Filament::setTenant($tenant, true);

    $scopeA = 'scope-a';
    $scopeB = 'scope-b';

    $matching = Finding::factory()
        ->count(2)
        ->for($tenant)
        ->create([
            'finding_type' => Finding::FINDING_TYPE_DRIFT,
            'status' => Finding::STATUS_NEW,
            'scope_key' => $scopeA,
        ]);

    $nonMatching = Finding::factory()
        ->for($tenant)
        ->create([
            'finding_type' => Finding::FINDING_TYPE_DRIFT,
            'status' => Finding::STATUS_NEW,
            'scope_key' => $scopeB,
        ]);

    Livewire::test(ListFindings::class)
        ->set('tableFilters', [
            'status' => ['value' => Finding::STATUS_NEW],
            'finding_type' => ['value' => Finding::FINDING_TYPE_DRIFT],
            'scope_key' => ['scope_key' => $scopeA],
        ])
        ->callAction('triage_all_matching');

    $matching->each(function (Finding $finding): void {
        $finding->refresh();

        expect($finding->status)->toBe(Finding::STATUS_TRIAGED);
        expect($finding->triaged_at)->not->toBeNull();
    });

    $nonMatching->refresh();
    expect($nonMatching->status)->toBe(Finding::STATUS_NEW);
    expect($nonMatching->acknowledged_at)->toBeNull();
});
