<?php
/**
 * Validador del sistema WhatsApp Bot Manager
 * Verifica que todos los componentes estén funcionando correctamente
 * Fecha: 2 de enero de 2026
 */

require_once 'config/config.php';

header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Validación del Sistema - WhatsApp Bot</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <style>
        .test-item {
            padding: 15px;
            margin: 10px 0;
            border-radius: 8px;
            border: 1px solid #dee2e6;
        }
        .test-success { background-color: #d4edda; border-color: #c3e6cb; }
        .test-warning { background-color: #fff3cd; border-color: #ffeaa7; }
        .test-error { background-color: #f8d7da; border-color: #f5c6cb; }
        .test-info { background-color: #d1ecf1; border-color: #bee5eb; }
    </style>
</head>
<body>
    <div class="container mt-5">
        <div class="row">
            <div class="col-md-12">
                <h1 class="text-center mb-4">
                    <i class="fas fa-check-circle text-primary"></i>
                    Validación del Sistema WhatsApp Bot
                </h1>
                
                <div class="card mb-4">
                    <div class="card-header">
                        <h5><i class="fas fa-info-circle"></i> Información del Sistema</h5>
                    </div>
                    <div class="card-body">
                        <p><strong>Versión:</strong> <?= APP_VERSION ?></p>
                        <p><strong>Desarrollador:</strong> <?= DEVELOPER_NAME ?></p>
                        <p><strong>URL Base:</strong> <?= AUTO_DETECTED_URL ?></p>
                        <p><strong>Zona Horaria:</strong> <?= TIMEZONE ?></p>
                        <p><strong>Fecha/Hora:</strong> <?= date('Y-m-d H:i:s') ?></p>
                    </div>
                </div>

                <?php
                $tests = [];
                
                // Test 1: PHP Version
                $phpVersion = phpversion();
                $phpOk = version_compare($phpVersion, '8.0.0', '>=');
                $tests[] = [
                    'name' => 'Versión de PHP',
                    'status' => $phpOk ? 'success' : 'error',
                    'message' => "PHP $phpVersion " . ($phpOk ? '✓' : '✗ (Se requiere PHP 8.0+)'),
                    'details' => $phpOk ? 'Versión compatible' : 'Actualiza a PHP 8.0 o superior'
                ];

                // Test 2: Extensiones PHP
                $requiredExtensions = ['pdo', 'pdo_mysql', 'curl', 'json', 'mbstring', 'openssl'];
                $missingExtensions = [];
                foreach ($requiredExtensions as $ext) {
                    if (!extension_loaded($ext)) {
                        $missingExtensions[] = $ext;
                    }
                }
                $extOk = empty($missingExtensions);
                $tests[] = [
                    'name' => 'Extensiones PHP',
                    'status' => $extOk ? 'success' : 'error',
                    'message' => $extOk ? 'Todas las extensiones están disponibles ✓' : 'Faltan extensiones: ' . implode(', ', $missingExtensions),
                    'details' => $extOk ? 'PDO, cURL, JSON, mbstring, OpenSSL' : 'Instala las extensiones faltantes'
                ];

                // Test 3: Conexión a Base de Datos
                $dbOk = false;
                $dbMessage = '';
                $dbDetails = '';
                try {
                    $db = Database::getInstance();
                    $result = $db->fetch("SELECT 1 as test");
                    $dbOk = ($result['test'] == 1);
                    $dbMessage = 'Conexión exitosa ✓';
                    $dbDetails = 'Host: ' . DB_HOST . ', DB: ' . DB_NAME;
                } catch (Exception $e) {
                    $dbMessage = 'Error de conexión: ' . $e->getMessage();
                    $dbDetails = 'Verifica la configuración en config.php';
                }
                $tests[] = [
                    'name' => 'Base de Datos',
                    'status' => $dbOk ? 'success' : 'error',
                    'message' => $dbMessage,
                    'details' => $dbDetails
                ];

                // Test 4: Estructura de tablas (solo si DB está OK)
                $tablesOk = false;
                $tablesMessage = '';
                $tablesDetails = '';
                if ($dbOk) {
                    try {
                        $requiredTables = ['users', 'conversations', 'menus', 'menu_options', 'autoresponses', 'system_config'];
                        $db = Database::getInstance();
                        $existingTables = [];
                        $missingTables = [];
                        
                        foreach ($requiredTables as $table) {
                            $result = $db->fetch("SHOW TABLES LIKE '$table'");
                            if ($result) {
                                $existingTables[] = $table;
                            } else {
                                $missingTables[] = $table;
                            }
                        }
                        
                        $tablesOk = empty($missingTables);
                        $tablesMessage = $tablesOk ? 'Todas las tablas existen ✓' : 'Faltan tablas: ' . implode(', ', $missingTables);
                        $tablesDetails = 'Tablas encontradas: ' . count($existingTables) . '/' . count($requiredTables);
                    } catch (Exception $e) {
                        $tablesMessage = 'Error verificando tablas: ' . $e->getMessage();
                        $tablesDetails = 'Ejecuta el instalador para crear las tablas';
                    }
                } else {
                    $tablesMessage = 'No se puede verificar (DB no disponible)';
                    $tablesDetails = 'Primero arregla la conexión a la base de datos';
                }
                $tests[] = [
                    'name' => 'Estructura de Base de Datos',
                    'status' => $tablesOk ? 'success' : ($dbOk ? 'error' : 'warning'),
                    'message' => $tablesMessage,
                    'details' => $tablesDetails
                ];

                // Test 5: Archivos críticos
                $criticalFiles = [
                    'classes/Database.php',
                    'services/BotService.php',
                    'services/WhatsAppService.php',
                    'api/webhook.php',
                    'api/send_message.php'
                ];
                $missingFiles = [];
                foreach ($criticalFiles as $file) {
                    if (!file_exists($file)) {
                        $missingFiles[] = $file;
                    }
                }
                $filesOk = empty($missingFiles);
                $tests[] = [
                    'name' => 'Archivos Críticos',
                    'status' => $filesOk ? 'success' : 'error',
                    'message' => $filesOk ? 'Todos los archivos críticos están presentes ✓' : 'Faltan archivos: ' . implode(', ', $missingFiles),
                    'details' => 'Classes, Services, APIs'
                ];

                // Test 6: Permisos de archivos
                $logsDir = 'logs';
                $logsWritable = is_dir($logsDir) && is_writable($logsDir);
                $tests[] = [
                    'name' => 'Permisos de Escritura',
                    'status' => $logsWritable ? 'success' : 'warning',
                    'message' => $logsWritable ? 'Directorio de logs escribible ✓' : 'Directorio de logs no escribible',
                    'details' => $logsWritable ? 'Los logs se pueden escribir correctamente' : 'chmod 755 en el directorio logs'
                ];

                // Test 7: Configuración WhatsApp
                $whatsappErrors = validateWhatsAppConfig();
                $whatsappOk = empty($whatsappErrors);
                $tests[] = [
                    'name' => 'Configuración WhatsApp',
                    'status' => $whatsappOk ? 'success' : 'warning',
                    'message' => $whatsappOk ? 'WhatsApp configurado correctamente ✓' : 'Configuración pendiente',
                    'details' => $whatsappOk ? 'Token, Phone ID y Webhook configurados' : implode(', ', $whatsappErrors)
                ];

                // Test 8: Estado de instalación
                $installationCompleted = isInstallationCompleted();
                $tests[] = [
                    'name' => 'Estado de Instalación',
                    'status' => $installationCompleted ? 'success' : 'info',
                    'message' => $installationCompleted ? 'Instalación completada ✓' : 'Instalación pendiente',
                    'details' => $installationCompleted ? 'Sistema listo para usar' : 'Ejecuta install.php para completar'
                ];

                // Test 9: Conectividad cURL
                $curlOk = false;
                $curlMessage = '';
                if (function_exists('curl_version')) {
                    $curlInfo = curl_version();
                    $curlOk = true;
                    $curlMessage = 'cURL disponible v' . $curlInfo['version'] . ' ✓';
                } else {
                    $curlMessage = 'cURL no disponible';
                }
                $tests[] = [
                    'name' => 'Conectividad cURL',
                    'status' => $curlOk ? 'success' : 'error',
                    'message' => $curlMessage,
                    'details' => $curlOk ? 'Puede comunicarse con APIs externas' : 'Se requiere cURL para WhatsApp API'
                ];

                // Test 10: Memoria y límites PHP
                $memoryLimit = ini_get('memory_limit');
                $maxExecution = ini_get('max_execution_time');
                $postMaxSize = ini_get('post_max_size');
                $uploadMaxSize = ini_get('upload_max_filesize');
                
                $tests[] = [
                    'name' => 'Límites PHP',
                    'status' => 'info',
                    'message' => 'Configuración actual del servidor',
                    'details' => "Memoria: $memoryLimit, Ejecución: {$maxExecution}s, POST: $postMaxSize, Upload: $uploadMaxSize"
                ];

                // Mostrar resultados
                foreach ($tests as $test) {
                    $statusClass = 'test-' . $test['status'];
                    $iconClass = [
                        'success' => 'fa-check-circle text-success',
                        'error' => 'fa-times-circle text-danger',
                        'warning' => 'fa-exclamation-triangle text-warning',
                        'info' => 'fa-info-circle text-info'
                    ][$test['status']];
                    
                    echo "<div class='test-item $statusClass'>";
                    echo "<h6><i class='fas $iconClass'></i> {$test['name']}</h6>";
                    echo "<p class='mb-1'><strong>{$test['message']}</strong></p>";
                    echo "<small class='text-muted'>{$test['details']}</small>";
                    echo "</div>";
                }

                // Resumen
                $totalTests = count($tests);
                $successCount = count(array_filter($tests, fn($t) => $t['status'] === 'success'));
                $errorCount = count(array_filter($tests, fn($t) => $t['status'] === 'error'));
                $warningCount = count(array_filter($tests, fn($t) => $t['status'] === 'warning'));
                $infoCount = count(array_filter($tests, fn($t) => $t['status'] === 'info'));
                ?>

                <div class="card mt-4">
                    <div class="card-header">
                        <h5><i class="fas fa-chart-pie"></i> Resumen de Validación</h5>
                    </div>
                    <div class="card-body">
                        <div class="row text-center">
                            <div class="col-md-3">
                                <h3 class="text-success"><?= $successCount ?></h3>
                                <small>Exitosos</small>
                            </div>
                            <div class="col-md-3">
                                <h3 class="text-danger"><?= $errorCount ?></h3>
                                <small>Errores</small>
                            </div>
                            <div class="col-md-3">
                                <h3 class="text-warning"><?= $warningCount ?></h3>
                                <small>Advertencias</small>
                            </div>
                            <div class="col-md-3">
                                <h3 class="text-info"><?= $infoCount ?></h3>
                                <small>Información</small>
                            </div>
                        </div>
                        
                        <hr>
                        
                        <div class="text-center">
                            <?php if ($errorCount === 0): ?>
                                <h4 class="text-success">
                                    <i class="fas fa-thumbs-up"></i>
                                    Sistema Validado Correctamente
                                </h4>
                                <p class="text-muted">Tu instalación de WhatsApp Bot está lista para funcionar</p>
                                <a href="index.php" class="btn btn-success btn-lg">
                                    <i class="fas fa-rocket"></i>
                                    Acceder al Sistema
                                </a>
                            <?php else: ?>
                                <h4 class="text-warning">
                                    <i class="fas fa-tools"></i>
                                    Se Requiere Configuración
                                </h4>
                                <p class="text-muted">Hay <?= $errorCount ?> error(es) que deben solucionarse antes de continuar</p>
                                <a href="instalacion.html" class="btn btn-primary btn-lg">
                                    <i class="fas fa-cog"></i>
                                    Ir al Instalador
                                </a>
                            <?php endif; ?>
                        </div>
                    </div>
                </div>

                <div class="text-center mt-4">
                    <small class="text-muted">
                        WhatsApp Bot Manager v<?= APP_VERSION ?> - 
                        <a href="<?= DEVELOPER_URL ?>" target="_blank"><?= DEVELOPER_NAME ?></a>
                    </small>
                </div>
            </div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        // Auto-refresh cada 30 segundos si hay errores
        <?php if ($errorCount > 0): ?>
        setTimeout(() => {
            window.location.reload();
        }, 30000);
        <?php endif; ?>
    </script>
</body>
</html>