<?php
/**
 * Complete IoT Tables Fix
 * Updates existing tables and creates missing ones
 */

error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once '../config/database.php';

try {
    $database = new Database();
    $db = $database->getConnection();
    
    if (!$db) {
        die('Database connection failed');
    }
    
    echo "<!DOCTYPE html>
    <html lang='ar' dir='rtl'>
    <head>
        <meta charset='UTF-8'>
        <title>Complete IoT Fix</title>
        <style>
            body { font-family: Arial; padding: 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; }
            .container { max-width: 900px; margin: 0 auto; }
            .box { background: white; padding: 20px; margin: 10px 0; border-radius: 15px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); }
            .success { background: #10b981; color: white; }
            .error { background: #ef4444; color: white; }
            .info { background: #3b82f6; color: white; }
            .warning { background: #f59e0b; color: white; }
            h1 { color: white; text-align: center; margin-bottom: 30px; }
            h2 { color: #667eea; margin-top: 0; }
            pre { background: #1f2937; color: #10b981; padding: 10px; border-radius: 5px; font-size: 12px; overflow-x: auto; }
        </style>
    </head>
    <body>
    <div class='container'>
    <h1>🔧 Complete IoT System Fix</h1>";
    
    // Step 1: Fix iot_devices table
    echo "<div class='box'><h2>1️⃣ Fixing iot_devices Table</h2>";
    $devices_columns = $db->query("SHOW COLUMNS FROM iot_devices")->fetchAll(PDO::FETCH_ASSOC);
    $devices_cols = array_column($devices_columns, 'Field');
    
    $devices_updates = [
        'is_active' => "ALTER TABLE iot_devices ADD COLUMN is_active BOOLEAN DEFAULT TRUE AFTER is_online",
        'ip_address' => "ALTER TABLE iot_devices ADD COLUMN ip_address VARCHAR(45) AFTER last_seen",
        'firmware_version' => "ALTER TABLE iot_devices ADD COLUMN firmware_version VARCHAR(20) AFTER ip_address"
    ];
    
    foreach ($devices_updates as $col => $sql) {
        if (!in_array($col, $devices_cols)) {
            try {
                $db->exec($sql);
                echo "<div class='box success'>✅ Added column: {$col}</div>";
            } catch (Exception $e) {
                echo "<div class='box error'>❌ Error: " . htmlspecialchars($e->getMessage()) . "</div>";
            }
        } else {
            echo "<div class='box info'>ℹ️ Column {$col} exists</div>";
        }
    }
    echo "</div>";
    
    // Step 2: Fix iot_commands table
    echo "<div class='box'><h2>2️⃣ Fixing iot_commands Table</h2>";
    $commands_columns = $db->query("SHOW COLUMNS FROM iot_commands")->fetchAll(PDO::FETCH_ASSOC);
    $commands_cols = array_column($commands_columns, 'Field');
    
    $commands_updates = [
        'priority' => "ALTER TABLE iot_commands ADD COLUMN priority TINYINT DEFAULT 5 AFTER payload",
        'sent_at' => "ALTER TABLE iot_commands ADD COLUMN sent_at DATETIME AFTER status",
        'created_by' => "ALTER TABLE iot_commands ADD COLUMN created_by VARCHAR(50) AFTER executed_at"
    ];
    
    foreach ($commands_updates as $col => $sql) {
        if (!in_array($col, $commands_cols)) {
            try {
                $db->exec($sql);
                echo "<div class='box success'>✅ Added column: {$col}</div>";
            } catch (Exception $e) {
                echo "<div class='box error'>❌ Error: " . htmlspecialchars($e->getMessage()) . "</div>";
            }
        } else {
            echo "<div class='box info'>ℹ️ Column {$col} exists</div>";
        }
    }
    
    // Update status enum if needed
    try {
        $db->exec("ALTER TABLE iot_commands MODIFY COLUMN status ENUM('pending', 'sent', 'executed', 'failed', 'cancelled') DEFAULT 'pending'");
        echo "<div class='box success'>✅ Updated status enum</div>";
    } catch (Exception $e) {
        echo "<div class='box info'>ℹ️ Status enum already updated</div>";
    }
    echo "</div>";
    
    // Step 3: Create missing tables
    echo "<div class='box'><h2>3️⃣ Creating Missing Tables</h2>";
    
    // iot_logs
    $check = $db->query("SHOW TABLES LIKE 'iot_logs'")->rowCount();
    if ($check == 0) {
        try {
            $db->exec("
                CREATE TABLE `iot_logs` (
                  `id` INT AUTO_INCREMENT PRIMARY KEY,
                  `device_id` VARCHAR(50) NOT NULL,
                  `log_type` ENUM('info', 'warning', 'error', 'command', 'status') DEFAULT 'info',
                  `message` TEXT NOT NULL,
                  `data` JSON,
                  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                  INDEX `idx_device_log` (`device_id`, `log_type`),
                  INDEX `idx_created_at` (`created_at`)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
            ");
            echo "<div class='box success'>✅ Created iot_logs table</div>";
        } catch (Exception $e) {
            echo "<div class='box error'>❌ Error: " . htmlspecialchars($e->getMessage()) . "</div>";
        }
    } else {
        echo "<div class='box info'>ℹ️ iot_logs table exists</div>";
    }
    
    // iot_sensors_data
    $check = $db->query("SHOW TABLES LIKE 'iot_sensors_data'")->rowCount();
    if ($check == 0) {
        try {
            $db->exec("
                CREATE TABLE `iot_sensors_data` (
                  `id` INT AUTO_INCREMENT PRIMARY KEY,
                  `device_id` VARCHAR(50) NOT NULL,
                  `sensor_type` VARCHAR(50) NOT NULL,
                  `value` DECIMAL(10, 2),
                  `unit` VARCHAR(20),
                  `raw_data` JSON,
                  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                  INDEX `idx_device_sensor` (`device_id`, `sensor_type`),
                  INDEX `idx_created_at` (`created_at`)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
            ");
            echo "<div class='box success'>✅ Created iot_sensors_data table</div>";
        } catch (Exception $e) {
            echo "<div class='box error'>❌ Error: " . htmlspecialchars($e->getMessage()) . "</div>";
        }
    } else {
        echo "<div class='box info'>ℹ️ iot_sensors_data table exists</div>";
    }
    
    // iot_schedules
    $check = $db->query("SHOW TABLES LIKE 'iot_schedules'")->rowCount();
    if ($check == 0) {
        try {
            $db->exec("
                CREATE TABLE `iot_schedules` (
                  `id` INT AUTO_INCREMENT PRIMARY KEY,
                  `device_id` VARCHAR(50) NOT NULL,
                  `schedule_name` VARCHAR(100) NOT NULL,
                  `action` VARCHAR(50) NOT NULL,
                  `payload` JSON,
                  `cron_expression` VARCHAR(100),
                  `is_active` BOOLEAN DEFAULT TRUE,
                  `last_run` DATETIME,
                  `next_run` DATETIME,
                  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                  INDEX `idx_device_schedule` (`device_id`, `is_active`),
                  INDEX `idx_next_run` (`next_run`)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
            ");
            echo "<div class='box success'>✅ Created iot_schedules table</div>";
        } catch (Exception $e) {
            echo "<div class='box error'>❌ Error: " . htmlspecialchars($e->getMessage()) . "</div>";
        }
    } else {
        echo "<div class='box info'>ℹ️ iot_schedules table exists</div>";
    }
    echo "</div>";
    
    // Step 4: Final Verification
    echo "<div class='box'><h2>4️⃣ Final Verification</h2>";
    $tables = ['iot_devices', 'iot_commands', 'iot_logs', 'iot_sensors_data', 'iot_schedules'];
    $all_good = true;
    
    foreach ($tables as $table) {
        $check = $db->query("SHOW TABLES LIKE '{$table}'")->rowCount();
        if ($check > 0) {
            $count = $db->query("SELECT COUNT(*) FROM {$table}")->fetchColumn();
            $cols = $db->query("SHOW COLUMNS FROM {$table}")->fetchAll(PDO::FETCH_ASSOC);
            echo "<div class='box success'>
                ✅ Table '{$table}' OK ({$count} rows, " . count($cols) . " columns)
            </div>";
        } else {
            echo "<div class='box error'>❌ Table '{$table}' missing!</div>";
            $all_good = false;
        }
    }
    echo "</div>";
    
    // Success Message
    if ($all_good) {
        echo "<div class='box success' style='text-align:center;padding:30px;'>
            <h2 style='color:white;margin:0 0 20px 0;'>🎉 All Done!</h2>
            <p style='font-size:18px;margin-bottom:20px;'>جميع جداول IoT جاهزة الآن!</p>
            <a href='../admin/iot_devices.php' 
               style='display:inline-block;background:white;color:#10b981;padding:15px 40px;
                      border-radius:10px;text-decoration:none;font-weight:bold;font-size:18px;'>
            🚀 افتح لوحة التحكم
            </a>
        </div>";
    } else {
        echo "<div class='box error' style='text-align:center;'>
            <h2 style='color:white;'>⚠️ بعض المشاكل لا تزال موجودة</h2>
            <p>يرجى مراجعة الأخطاء أعلاه</p>
        </div>";
    }
    
    echo "</div></body></html>";
    
} catch (Exception $e) {
    echo "<div class='box error'>❌ Fatal Error: " . htmlspecialchars($e->getMessage()) . "</div>";
    echo "<pre>" . htmlspecialchars($e->getTraceAsString()) . "</pre>";
}
?>
