<?php

declare(strict_types=1);

use App\Filament\Resources\ProviderConnectionResource;
use App\Filament\Resources\TenantResource;
use App\Models\ProviderConnection;
use App\Models\TenantPermission;
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([
        'tenant_id' => (int) $tenant->getKey(),
        'display_name' => 'Spec081 Connection',
        'provider' => 'microsoft',
        'status' => 'connected',
    ]);

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

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

        $this->get(ProviderConnectionResource::getUrl('edit', ['tenant' => $tenant->external_id, 'record' => $connection], panel: 'admin'))
            ->assertOk()
            ->assertSee('Spec081 Connection');
    });

    Bus::assertNothingDispatched();
});

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

    TenantPermission::query()->create([
        'tenant_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(TenantResource::getUrl('view', ['record' => $tenant], tenant: $tenant))
            ->assertOk()
            ->assertSee($tenant->name)
            ->assertSee('DeviceManagementConfiguration.ReadWrite.All');
    });

    Bus::assertNothingDispatched();
});
