<?php

use App\Models\Policy;
use App\Models\PolicyVersion;
use App\Models\Tenant;
use App\Models\User;
use App\Services\Graph\GraphClientInterface;

use function Pest\Laravel\mock;

beforeEach(function () {
    putenv('INTUNE_TENANT_ID');
    unset($_ENV['INTUNE_TENANT_ID'], $_SERVER['INTUNE_TENANT_ID']);

    $this->tenant = Tenant::factory()->create();
    $this->policy = Policy::factory()->create([
        'tenant_id' => $this->tenant->id,
    ]);

    $this->user = User::factory()->create();
    [$this->user, $this->tenant] = createUserWithTenant(tenant: $this->tenant, user: $this->user, role: 'owner');
});

it('renders policy version view without any Graph calls during render', function () {
    mock(GraphClientInterface::class)
        ->shouldNotReceive('listPolicies')
        ->shouldNotReceive('getPolicy')
        ->shouldNotReceive('getOrganization')
        ->shouldNotReceive('applyPolicy')
        ->shouldNotReceive('getServicePrincipalPermissions')
        ->shouldNotReceive('request');

    $version = PolicyVersion::factory()->create([
        'tenant_id' => $this->tenant->id,
        'policy_id' => $this->policy->id,
        'version_number' => 1,
        'assignments' => [
            [
                'id' => 'assignment-1',
                'intent' => 'apply',
                'target' => [
                    '@odata.type' => '#microsoft.graph.groupAssignmentTarget',
                    'groupId' => 'group-123',
                ],
            ],
        ],
    ]);

    $this->actingAs($this->user);

    $response = $this->get(route('filament.tenant.resources.policy-versions.view', array_merge(
        filamentTenantRouteParams($this->tenant),
        ['record' => $version],
    )));

    $response->assertOk();
});
