<?php

declare(strict_types=1);

use App\Filament\Resources\ProviderConnectionResource;
use App\Models\ManagedEnvironmentPermission;
use App\Models\ProviderConnection;
use App\Support\Links\RequiredPermissionsLinks;
use Illuminate\Support\Facades\Bus;

it('Spec081 renders provider connection list/edit pages DB-only', function (): void {
    [$user, $tenant] = createUserWithTenant(role: 'owner');

    $connection = ProviderConnection::factory()->create([
        'managed_environment_id' => (int) $tenant->getKey(),
        'display_name' => 'Spec081 Connection',
        'provider' => 'microsoft',
        'is_enabled' => true,
        'migration_review_required' => true,
        'metadata' => [
            'legacy_identity_classification_source' => 'tenantpilot:provider-connections:classify',
            'legacy_identity_result' => 'dedicated',
            'effective_app' => [
                'app_id' => null,
                'source' => 'review_required',
            ],
        ],
    ]);

    $this->actingAs($user);
    Bus::fake();

    assertNoOutboundHttp(function () use ($tenant, $connection): void {
        $this->get(ProviderConnectionResource::getUrl('index', ['tenant' => $tenant], panel: 'admin'))
            ->assertOk()
            ->assertSee('Spec081 Connection');

        $this->get(ProviderConnectionResource::getUrl('edit', ['tenant' => $tenant, 'record' => $connection], panel: 'admin'))
            ->assertOk()
            ->assertSee('Spec081 Connection')
            ->assertSee('Target scope')
            ->assertSee('Target scope ID')
            ->assertSee('Lifecycle')
            ->assertSee('Enabled')
            ->assertSee('Verification')
            ->assertSee('Migration review')
            ->assertSee('Review required')
            ->assertDontSee('Entra tenant ID')
            ->assertDontSee('Diagnostic status')
            ->assertDontSee('Diagnostic health');
    });

    Bus::assertNothingDispatched();
});

it('Spec081 renders required-permissions page DB-only', function (): void {
    [$user, $tenant] = createUserWithTenant(role: 'owner');

    ManagedEnvironmentPermission::query()->create([
        'managed_environment_id' => (int) $tenant->getKey(),
        'permission_key' => 'DeviceManagementConfiguration.ReadWrite.All',
        'status' => 'granted',
        'details' => ['source' => 'spec081-test'],
    ]);

    $this->actingAs($user);
    Bus::fake();

    assertNoOutboundHttp(function () use ($tenant): void {
        $this->get(RequiredPermissionsLinks::requiredPermissions($tenant, ['status' => 'all']))
            ->assertOk()
            ->assertSee($tenant->name)
            ->assertSee('DeviceManagementConfiguration.ReadWrite.All');
    });

    Bus::assertNothingDispatched();
});
