<?php
/**
 * Script de Validação de Rotas e Endpoints
 * 
 * Este script valida se todas as rotas registradas nos módulos
 * têm controllers e métodos correspondentes.
 */

require_once __DIR__ . '/../src/Autoloader.php';
Gestoreasy\Autoloader::register();

use Gestoreasy\Core\Routing\Router;
use Gestoreasy\Core\Module\ModuleManager;

$modulesDir = __DIR__ . '/../modules';
$router = new Router();
$moduleManager = new ModuleManager($router);

echo "=== Validação de Rotas e Endpoints ===\n\n";

// Carregar módulos
$moduleManager->loadModules($modulesDir);

// Listar rotas registradas
$routes = $router->list();

echo "Total de rotas registradas: " . count($routes) . "\n\n";

// Verificar rotas duplicadas
$routePaths = [];
$duplicates = [];

foreach ($routes as $route) {
    $path = $route['path'] ?? $route['pattern'] ?? '';
    $method = $route['method'] ?? 'GET';
    $key = $method . ':' . $path;
    
    if (isset($routePaths[$key])) {
        if (!isset($duplicates[$key])) {
            $duplicates[$key] = [];
        }
        $duplicates[$key][] = $route;
    } else {
        $routePaths[$key] = $route;
    }
}

if (!empty($duplicates)) {
    echo "⚠️  ROTAS DUPLICADAS ENCONTRADAS:\n";
    foreach ($duplicates as $key => $dups) {
        echo "  - $key (" . count($dups) . " ocorrências)\n";
    }
    echo "\n";
} else {
    echo "✅ Nenhuma rota duplicada encontrada\n\n";
}

// Verificar módulos carregados
$loaded = $moduleManager->debugLoaded();
$errors = [];
$warnings = [];

foreach ($loaded as $module) {
    if ($module['status'] !== 'registered') {
        $errors[] = "Módulo {$module['file']}: {$module['status']}";
    }
}

if (!empty($errors)) {
    echo "❌ ERROS ENCONTRADOS:\n";
    foreach ($errors as $error) {
        echo "  - $error\n";
    }
    echo "\n";
} else {
    echo "✅ Todos os módulos foram carregados com sucesso\n\n";
}

// Validar novos módulos (Motopecas, Locadora, Autopecas)
$newModules = ['Motopecas', 'Locadora', 'Autopecas'];
echo "=== Validação de Módulos Novos ===\n\n";

foreach ($newModules as $moduleName) {
    $moduleFile = $modulesDir . '/' . $moduleName . '/Module.php';
    if (file_exists($moduleFile)) {
        echo "✅ Módulo $moduleName encontrado\n";
        
        // Verificar controllers
        $controllersDir = $modulesDir . '/' . $moduleName . '/Controllers';
        if (is_dir($controllersDir)) {
            $controllers = glob($controllersDir . '/*.php');
            echo "  - Controllers encontrados: " . count($controllers) . "\n";
        }
        
        // Verificar migrations
        $migrationsDir = $modulesDir . '/' . $moduleName . '/migrations';
        if (is_dir($migrationsDir)) {
            $migrations = glob($migrationsDir . '/*.sql');
            echo "  - Migrations encontradas: " . count($migrations) . "\n";
        }
    } else {
        echo "❌ Módulo $moduleName não encontrado\n";
    }
    echo "\n";
}

echo "=== Resumo ===\n";
echo "Rotas totais: " . count($routes) . "\n";
echo "Rotas duplicadas: " . count($duplicates) . "\n";
echo "Módulos carregados: " . count(array_filter($loaded, fn($m) => $m['status'] === 'registered')) . "\n";
echo "Módulos com erro: " . count($errors) . "\n";

if (empty($duplicates) && empty($errors)) {
    echo "\n✅ Validação concluída com sucesso!\n";
    exit(0);
} else {
    echo "\n⚠️  Validação concluída com avisos\n";
    exit(1);
}

