<?php

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

/**
 * 🚀 INSTALADOR DEFINITIVO (DIOS) 🚀
 * Este archivo hace TODO. No necesitas hacer nada más.
 */
error_reporting(E_ALL);
ini_set('display_errors', 1);

echo '<h1>🚀 Instalando Sistema Innova 🚀</h1>';
echo '<p>Ejecutando pasos automáticos...</p>';

$root = __DIR__.'/..';

// 1. REPARAR ARCHIVO FALTANTE DE COMPOSER
$platformCheck = $root.'/vendor/composer/platform_check.php';
if (! is_dir(dirname($platformCheck))) {
    @mkdir(dirname($platformCheck), 0755, true);
}
file_put_contents($platformCheck, '<?php // Archivo restaurado automaticamente');
echo '<p>✅ Autoloader reparado.</p>';

// 2. LIMPIAR BASURA DE INTENTOS ANTERIORES
foreach (glob($root.'/bootstrap/cache/*.php') as $f) {
    @unlink($f);
}
echo '<p>✅ Caché eliminada.</p>';

// 3. CREAR ARCHIVO DE CONFIGURACIÓN (.ENV) EXACTO PARA MYSQL
$envFile = $root.'/.env';
$mysqlEnv = 'APP_NAME=Innova
APP_ENV=production
APP_KEY=base64:6hZQtT32OYCQVsRQYwh2vwozuNHo44lATbTAhQBKDMU=
APP_DEBUG=true
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=innovaajustes_sis
DB_USERNAME=innovaajustes_miideasc
DB_PASSWORD=calidad22EC
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_CONNECTION=sync
';
file_put_contents($envFile, $mysqlEnv);
echo '<p>✅ Configuración conectada a MySQL.</p>';

// 4. REPARAR CÓDIGO ROTO EN LAS MIGRACIONES Y REORDENAR
$migPath = $root.'/database/migrations';
$files = scandir($migPath);
foreach ($files as $file) {
    if ($file === '.' || $file === '..') {
        continue;
    }
    $filePath = $migPath.'/'.$file;
    $content = file_get_contents($filePath);
    $originalContent = $content;

    // Correcciones precisas de nombres en llaves foráneas
    $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);
    $content = str_replace("constrained('ajustadors')", "constrained('ajustadores')", $content);

    // Parche para la migración exclusiva de SQLite
    if (strpos($file, 'update_cliente_identificacion_enum') !== false) {
        if (strpos($content, 'Schema::disableForeignKeyConstraints();') === false) {
            $content = str_replace("Schema::drop('clientes');", "Schema::disableForeignKeyConstraints();\n        Schema::drop('clientes');", $content);
            $content = str_replace("Schema::rename('clientes_new', 'clientes');", "Schema::rename('clientes_new', 'clientes');\n        Schema::enableForeignKeyConstraints();", $content);
        }
    }

    if ($content !== $originalContent) {
        file_put_contents($filePath, $content);
    }

    // Mover la tabla 'tenants' al principio del todo para que las relaciones cuadren
    if (strpos($file, 'create_tenants_table') !== false && strpos($file, '0000_00_00') === false) {
        @rename($filePath, $migPath.'/0000_00_00_000000_create_tenants_table.php');
    }
}
echo '<p>✅ Migraciones corregidas y ordenadas.</p>';

// 5. VACIAR BASE DE DATOS SIN IMPORTAR ERRORES (FUERZA BRUTA)
try {
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=innovaajustes_sis;charset=utf8mb4', 'innovaajustes_miideasc', 'calidad22EC');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec('SET FOREIGN_KEY_CHECKS = 0'); // APAGAR REGLAS DE SEGURIDAD
    $tables = $pdo->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN);
    foreach ($tables as $table) {
        $pdo->exec("DROP TABLE IF EXISTS `$table`");
    }
    $pdo->exec('SET FOREIGN_KEY_CHECKS = 1'); // PRENDER REGLAS
    echo '<p>✅ Base de datos formateada (Limpia).</p>';
} catch (Exception $e) {
    exit("<h2 style='color: red;'>Error en cPanel con MySQL: ".$e->getMessage().'</h2>');
}

// 6. ARRANCAR EL SISTEMA Y FINALIZAR
echo '<h3>Iniciando creación de tablas y datos semilla...</h3>';
try {
    require $root.'/vendor/autoload.php';
    $app = require_once $root.'/bootstrap/app.php';
    $kernel = $app->make(Kernel::class);
    $kernel->bootstrap();

    // Obligar a Laravel a usar MySQL en este milisegundo
    config(['database.default' => 'mysql']);

    // Desactivar reglas dentro de Laravel también, doble escudo.
    DB::statement('SET FOREIGN_KEY_CHECKS=0;');

    // COMANDO MAESTRO QUE CREA TABLAS E INSERTA DATOS
    Artisan::call('migrate:fresh', ['--force' => true, '--seed' => true]);

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

    echo "<pre style='background: #1e1e1e; color: #00ff00; padding: 15px; overflow-y: auto; max-height: 200px;'>".Artisan::output().'</pre>';

    echo "<h2 style='color: green;'>🎉 ¡INSTALACIÓN COMPLETADA EXITOSAMENTE! 🎉</h2>";
    echo "<h3><a href='/' style='padding: 10px 20px; background: blue; color: white; text-decoration: none; border-radius: 5px;'>ENTRAR AL SISTEMA</a></h3>";

    // Borrar este mismo archivo por seguridad
    @unlink(__FILE__);

} catch (Throwable $e) {
    echo "<h2 style='color: red;'>Fallo al instalar: ".$e->getMessage().'</h2>';
    echo '<p>En la línea: '.$e->getLine().' de '.$e->getFile().'</p>';
}
