<?php

declare(strict_types=1);

use Illuminate\Support\Facades\File;

it('does not use legacy platform-superadmin flag in code or tests', function () {
    $forbiddenPatterns = [
        '/\bis_platform_superadmin\b/',
        '/\bisPlatformSuperadmin\s*\(/',
    ];

    $basePaths = [
        app_path(),
        resource_path('views'),
        base_path('tests'),
    ];

    $allowedPathFragments = [
        DIRECTORY_SEPARATOR.'database'.DIRECTORY_SEPARATOR.'migrations'.DIRECTORY_SEPARATOR,
        DIRECTORY_SEPARATOR.'specs'.DIRECTORY_SEPARATOR,
        DIRECTORY_SEPARATOR.'docs'.DIRECTORY_SEPARATOR,
        DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR,
        DIRECTORY_SEPARATOR.'storage'.DIRECTORY_SEPARATOR,
        DIRECTORY_SEPARATOR.'bootstrap'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR,
        DIRECTORY_SEPARATOR.'tests'.DIRECTORY_SEPARATOR.'Deprecation'.DIRECTORY_SEPARATOR,
    ];

    $violations = [];

    foreach ($basePaths as $basePath) {
        foreach (File::allFiles($basePath) as $file) {
            $path = $file->getRealPath();

            if (! is_string($path)) {
                continue;
            }

            foreach ($allowedPathFragments as $fragment) {
                if (str_contains($path, $fragment)) {
                    continue 2;
                }
            }

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

            foreach ($forbiddenPatterns as $pattern) {
                if (preg_match($pattern, $contents) === 1) {
                    $violations[] = $path;
                    break;
                }
            }
        }
    }

    expect($violations)
        ->toBeEmpty('Remove usages of `users.is_platform_superadmin` / `isPlatformSuperadmin()` from runtime code and tests. Found in: '.implode(', ', $violations));
});
