<?php

declare(strict_types=1);

namespace Tests\Feature\Filament;

use App\Filament\Resources\SubscriptionRequests\Pages\ListSubscriptionRequests;
use App\Models\Company;
use App\Models\SubscriptionRequest;
use App\Models\User;
use Filament\Facades\Filament;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Livewire\Livewire;
use PHPUnit\Framework\Attributes\Test;
use Spatie\Permission\Models\Role;
use Tests\TestCase;

/**
 * La tabla de SubscriptionRequests importaba las acciones de `Filament\Tables\Actions\*`
 * (namespace de Filament 4, unificado en Filament 5 a `Filament\Actions\*`) → 500
 * "Class Filament\Tables\Actions\ViewAction not found" al abrir /admin/subscription-requests.
 * La Fase 3 hizo esta pantalla relevante (el super_admin revisa aquí las solicitudes que
 * genera el bloqueo post-trial). Este test renderiza el listado con un registro, forzando
 * la construcción de las row actions (ViewAction + ActionGroup) donde vivía el bug.
 */
class SubscriptionRequestsTableTest extends TestCase
{
    use DatabaseTransactions;

    #[Test]
    public function super_admin_can_render_the_subscription_requests_list(): void
    {
        Role::firstOrCreate(['name' => 'super_admin', 'guard_name' => 'web']);
        $super = User::factory()->create(['company_id' => null]);
        $super->assignRole('super_admin');
        $this->actingAs($super);
        Filament::setCurrentPanel(Filament::getDefaultPanel());

        // Un registro para que la tabla construya las row actions (donde estaba el bug).
        $company = Company::factory()->create();
        $request = SubscriptionRequest::create([
            'company_id' => $company->id,
            'requested_by_user_id' => $super->id,
            'request_type' => SubscriptionRequest::TYPE_UPGRADE_PLAN,
            'comments' => 'Solicitud de prueba',
        ]);

        Livewire::test(ListSubscriptionRequests::class)
            ->assertOk()
            ->assertCanSeeTableRecords([$request]);
    }
}
