<?php

declare(strict_types=1);

use App\Support\Workspaces\WorkspaceContext;
use Illuminate\Support\Facades\Route;

it('does not register active /admin/t route family product routes', function (): void {
    $legacyRouteUris = collect(Route::getRoutes())
        ->map(fn ($route): string => ltrim((string) $route->uri(), '/'))
        ->filter(fn (string $uri): bool => preg_match('#^admin/t(?:/|$)#', $uri) === 1)
        ->values();

    expect($legacyRouteUris)->toBeEmpty();
});

it('does not register active /admin/tenants product routes', function (): void {
    $legacyRouteUris = collect(Route::getRoutes())
        ->map(fn ($route): string => ltrim((string) $route->uri(), '/'))
        ->filter(fn (string $uri): bool => preg_match('#^admin/tenants(?:/|$)#', $uri) === 1)
        ->values();

    expect($legacyRouteUris)->toBeEmpty();
});

it('does not register active tenant resource route names', function (): void {
    $legacyRouteNames = collect(Route::getRoutes())
        ->map(fn ($route): ?string => $route->getName())
        ->filter(fn (?string $name): bool => is_string($name) && (
            str_starts_with($name, 'filament.tenant.')
            || str_starts_with($name, 'filament.admin.resources.tenants.')
        ))
        ->values();

    expect($legacyRouteNames)->toBeEmpty();
});

it('returns 404 for retired ManagedEnvironmentResource route shapes', function (): void {
    [$user, $tenant] = createMinimalUserWithTenant(role: 'owner');

    foreach ([
        '/admin/t/'.$tenant->external_id,
        '/admin/t/'.$tenant->external_id.'/inventory-items',
        '/admin/tenants',
        "/admin/tenants/{$tenant->external_id}",
        "/admin/tenants/{$tenant->external_id}/edit",
        "/admin/tenants/{$tenant->external_id}/memberships",
    ] as $path) {
        $this->actingAs($user)
            ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id])
            ->get($path)
            ->assertNotFound();
    }
});
