<?php

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

/**
 * 💥 LIMPIADOR Y REPARADOR ATÓMICO 💥
 * Este script borra la base de datos a la fuerza bruta y luego instala de cero.
 */
error_reporting(E_ALL);
ini_set('display_errors', 1);

echo '<h1>🛠️ Limpiador Atómico - 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');

// 2. Configuración .env
$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);

// 3. VACIAR BASE DE DATOS A LA FUERZA CON PDO (Evita el Error 1451)
echo '<h3>Vaciando base de datos a la fuerza...</h3>';
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);

    // Desactivar restricciones de llaves foráneas en MySQL directamente
    $pdo->exec('SET FOREIGN_KEY_CHECKS = 0');

    $tables = $pdo->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN);
    foreach ($tables as $table) {
        $pdo->exec("DROP TABLE IF EXISTS `$table`");
        echo "<p>🗑️ Eliminada antigua tabla: $table</p>";
    }

    $pdo->exec('SET FOREIGN_KEY_CHECKS = 1');
    echo "<p style='color: green;'>✅ Base de datos totalmente en blanco.</p>";
} catch (PDOException $e) {
    exit("<h2 style='color: red;'>Error vaciando la DB: ".$e->getMessage().'</h2>');
}

// 4. Parches de Orden (Por si acaso)
$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;
    foreach ($order as $key => $prefix) {
        if (strpos($file, $key) !== false && strpos($file, '0000_01_01') === false) {
            $newName = $prefix.'_'.substr($file, strpos($file, 'create_'));
            @rename($filePath, $migPath.'/'.$newName);
        }
    }
}

// 5. Instalar
try {
    require $autoload;
    $app = require_once $root.'/bootstrap/app.php';
    $kernel = $app->make(Kernel::class);
    $kernel->bootstrap();

    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 Nueva...</h3>';

    // Corremos migrate NORMAL (no fresh) porque ya vaciamos la base de datos a mano
    Artisan::call('migrate', ['--force' => true, '--seed' => true]);
    echo "<pre>RESULTADO:\n".Artisan::output().'</pre>';

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

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