<?php

declare(strict_types=1);

use App\Models\OperationRun;
use App\Support\OperationRunLinks;
use Illuminate\Support\Facades\File;

it('routes all OperationRun view links through OperationRunLinks', function (): void {
    $files = File::allFiles(app_path());

    $violations = [];

    foreach ($files as $file) {
        $path = $file->getRealPath();
        if (! is_string($path)) {
            continue;
        }

        // OperationRunLinks is the canonical wrapper.
        if (str_ends_with($path, '/Support/OperationRunLinks.php')) {
            continue;
        }

        $contents = File::get($path);

        if (preg_match("/\\bOperationRunResource::getUrl\(\\s*'view'/", $contents) === 1
            || preg_match("/route\(\s*'filament\.admin\.resources\.operations\.view'/", $contents) === 1) {
            $violations[] = $path;
        }
    }

    expect($violations)->toBeEmpty();
})->group('ops-ux');

it('resolves tenantless operation run links to the canonical admin.operations.view route', function (): void {
    $run = OperationRun::factory()->create();

    $expectedUrl = route('admin.operations.view', ['run' => (int) $run->getKey()]);

    expect(OperationRunLinks::tenantlessView($run))->toBe($expectedUrl);
    expect(OperationRunLinks::tenantlessView((int) $run->getKey()))->toBe($expectedUrl);
})->group('ops-ux');
