<?php

declare(strict_types=1);

use App\Filament\Resources\ProviderConnectionResource;
use App\Models\ProviderConnection;
use App\Models\ManagedEnvironment;

it('returns an empty canonical list for unauthorized tenant filters', function (): void {
    $tenantA = ManagedEnvironment::factory()->create(['name' => 'ManagedEnvironment A']);
    $tenantB = ManagedEnvironment::factory()->create(['name' => 'ManagedEnvironment B']);

    [$user] = createUserWithTenant($tenantA, role: 'owner');

    ProviderConnection::factory()->create([
        'managed_environment_id' => (int) $tenantA->getKey(),
        'workspace_id' => (int) $tenantA->workspace_id,
        'display_name' => 'ManagedEnvironment A Connection',
    ]);

    ProviderConnection::factory()->create([
        'managed_environment_id' => (int) $tenantB->getKey(),
        'workspace_id' => (int) $tenantB->workspace_id,
        'display_name' => 'ManagedEnvironment B Connection',
    ]);

    $this->actingAs($user)
        ->get(ProviderConnectionResource::getUrl('index', tenant: $tenantB))
        ->assertOk()
        ->assertDontSee('ManagedEnvironment A Connection')
        ->assertDontSee('ManagedEnvironment B Connection');
});

it('does not show non-member tenants in the choose-environment list', function (): void {
    $tenantA = ManagedEnvironment::factory()->create(['name' => 'ManagedEnvironment A']);
    $tenantB = ManagedEnvironment::factory()->create(['name' => 'ManagedEnvironment B']);

    [$user] = createUserWithTenant($tenantA, role: 'owner');

    $this->actingAs($user)
        ->get('/admin/choose-environment')
        ->assertOk()
        ->assertSee('ManagedEnvironment A')
        ->assertDontSee('ManagedEnvironment B');
});

it('keeps provider connections excluded from global search', function (): void {
    $property = new ReflectionProperty(ProviderConnectionResource::class, 'isGloballySearchable');
    $property->setAccessible(true);

    expect($property->getValue())->toBeFalse();
});
