<?php

use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;

/**
 * 🚀 SUPER REPARADOR DEFINITIVO - VERSIÓN ZURICH 🚀
 * Este script soluciona TODO:
 * 1. Re-ordena físicamente las migraciones (Tenants -> Clientes -> Vehiculos -> Casos).
 * 2. Parchea los nombres de tablas en el código (ajustadores, cotizaciones).
 * 3. Fuerza MySQL y limpia la caché.
 */
error_reporting(E_ALL);
ini_set('display_errors', 1);

echo '<h1>🛠️ Super Reparador de Instalación - Iniciado</h1>';

$root = __DIR__.'/..';
$migPath = $root.'/database/migrations';
$envFile = $root.'/.env';
$autoload = $root.'/vendor/autoload.php';

// 1. Limpieza de Caché y Estructura
foreach (glob($root.'/bootstrap/cache/*.php') as $f) {
    @unlink($f);
}
$platformCheck = $root.'/vendor/composer/platform_check.php';
if (! is_dir(dirname($platformCheck))) {
    @mkdir(dirname($platformCheck), 0755, true);
}
file_put_contents($platformCheck, '<?php // Fixed');
echo '<p>✅ Sistema de base preparado.</p>';

// 2. Configuración .env (MySQL)
$mysqlEnv = "APP_NAME=Innova\nAPP_ENV=production\nAPP_KEY=base64:6hZQtT32OYCQVsRQYwh2vwozuNHo44lATbTAhQBKDMU=\nAPP_DEBUG=true\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=innovaajustes_sis\nDB_USERNAME=innovaajustes_miideasc\nDB_PASSWORD=calidad22EC\nCACHE_DRIVER=file\nSESSION_DRIVER=file\nQUEUE_CONNECTION=sync\n";
file_put_contents($envFile, $mysqlEnv);
echo '<p>✅ .env configurado correctamente.</p>';

// 3. REORDENAR Y PARCHEAR MIGRACIONES (EL PASO MAESTRO)
echo '<h3>Reorganizando base de datos para MySQL...</h3>';

$order = [
    'create_tenants_table' => '0000_01_01_000001',
    'create_brokers_table' => '0000_01_01_000002',
    'create_talleres_table' => '0000_01_01_000003',
    'create_ajustadores_table' => '0000_01_01_000004',
    'create_personal_zurich_table' => '0000_01_01_000005',
    'create_clientes_table' => '0000_01_01_000006',
    'create_vehiculos_table' => '0000_01_01_000007',
    'create_casos_table' => '0000_01_01_000008',
];

$files = scandir($migPath);
foreach ($files as $file) {
    if ($file === '.' || $file === '..') {
        continue;
    }
    $filePath = $migPath.'/'.$file;
    $content = file_get_contents($filePath);
    $originalContent = $content;

    // A. Parchear nombres de tablas
    $content = str_replace("constrained('ajustadors')", "constrained('ajustadores')", $content);
    $content = str_replace("foreignId('ajustador_id')->constrained()", "foreignId('ajustador_id')->constrained('ajustadores')", $content);
    $content = str_replace("foreignId('cotizacion_id')->constrained()", "foreignId('cotizacion_id')->constrained('cotizaciones')", $content);

    if ($content !== $originalContent) {
        file_put_contents($filePath, $content);
        echo "<p>Parcheado: $file</p>";
    }

    // B. Reordenar
    foreach ($order as $key => $prefix) {
        if (strpos($file, $key) !== false) {
            $newName = $prefix.'_'.substr($file, strpos($file, 'create_'));
            if ($file !== $newName) {
                @rename($filePath, $migPath.'/'.$newName);
                echo "<p>✅ Reordenado: $file -> $newName</p>";
            }
            break;
        }
    }
}

// 4. Instalar
try {
    if (! file_exists($autoload)) {
        throw new Exception("Error: No existe 'vendor'.");
    }
    require $autoload;
    $app = require_once $root.'/bootstrap/app.php';
    $kernel = $app->make(Kernel::class);
    $kernel->bootstrap();

    // Forzar MySQL al máximo
    config(['database.default' => 'mysql']);
    config(['database.connections.mysql.database' => 'innovaajustes_sis']);
    config(['database.connections.mysql.username' => 'innovaajustes_miideasc']);
    config(['database.connections.mysql.password' => 'calidad22EC']);

    echo '<h3>Corriendo Instalación Final...</h3>';
    DB::statement('SET FOREIGN_KEY_CHECKS=0;');

    // Ejecutar migrate:fresh
    Artisan::call('migrate:fresh', ['--force' => true, '--seed' => true]);
    echo "<pre>RESULTADO:\n".Artisan::output().'</pre>';

    DB::statement('SET FOREIGN_KEY_CHECKS=1;');

    echo "<h2 style='color: green;'>🚀 ¡SISTEMA INSTALADO EXITOSAMENTE!</h2>";
    echo "<p><a href='/'>ENTRAR AL SISTEMA AHORA</a></p>";

} catch (Throwable $e) {
    echo "<h2 style='color: red;'>Error: ".$e->getMessage().'</h2>';
    echo '<pre>'.$e->getTraceAsString().'</pre>';
}
