<?php
session_start();

// التحقق من تسجيل الدخول
if (!isset($_SESSION['user_id'])) {
    header("Location: index.php");
    exit();
}

// تضمين ملف الاتصال بقاعدة البيانات
require_once 'db_connect.php';

// التأكد من أن الاتصال ناجح
if (!isset($conn) || !$conn) {
    die("فشل الاتصال بقاعدة البيانات. تحقق من ملف db_connect.php.");
}

// جلب بيانات المستخدم الحالي
$user_name = $_SESSION['user_name'] ?? '';
$user_id = $_SESSION['user_id'];
if (empty($user_name)) {
    try {
        $stmt = $conn->prepare("SELECT username FROM users WHERE id = :user_id");
        $stmt->execute([':user_id' => $user_id]);
        $user = $stmt->fetch(PDO::FETCH_ASSOC);
        $user_name = $user['username'] ?? 'مستخدم غير محدد';
        $_SESSION['user_name'] = $user_name;
    } catch (PDOException $e) {
        error_log("Error fetching user name: " . $e->getMessage());
    }
}

// تحديد المسار الكامل لـ mysqldump و mysql
$mysqldump_path = 'C:/xampp/mysql/bin/mysqldump'; // للمحلي
if ($_SERVER['SERVER_NAME'] != 'localhost') {
    // إذا كان يعمل على الخادم أونلاين
    $mysqldump_path = '/usr/bin/mysqldump'; // المسار الشائع على الخوادم
}

$mysql_path = 'C:/xampp/mysql/bin/mysql'; // للمحلي
if ($_SERVER['SERVER_NAME'] != 'localhost') {
    $mysql_path = '/usr/bin/mysql'; // المسار الشائع على الخوادم
}

// معالجة عمليات النسخ الاحتياطي والاستعادة
$message = '';
$backup_dir = 'backups/'; // المسار النسبي يعمل على المحلي والخادم

// إنشاء مجلد النسخ الاحتياطي إذا لم يكن موجوداً
if (!is_dir($backup_dir)) {
    if (!mkdir($backup_dir, 0777, true)) {
        $message = "فشل إنشاء مجلد النسخ الاحتياطي. تحقق من الأذونات.";
    }
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_POST['create_backup'])) {
        $custom_dir = trim($_POST['backup_dir']);
        if (!empty($custom_dir)) {
            $backup_dir = rtrim($custom_dir, '/') . '/';
            if (!is_dir($backup_dir) && !mkdir($backup_dir, 0777, true)) {
                $message = "فشل إنشاء المجلد المخصص. تأكد من المسار والأذونات.";
            }
        }

        if (empty($message)) {
            $backup_file = $backup_dir . 'backup_' . date('Y-m-d_H-i-s') . '.sql';
            $command = "$mysqldump_path -h {$host} -u {$username} --password={$password} {$dbname} > " . escapeshellarg($backup_file) . " 2>&1";
            
            $output = [];
            $return_var = 0;
            set_time_limit(120);
            exec($command, $output, $return_var);

            if (file_exists($backup_file)) {
                $file_size = filesize($backup_file);
                if ($file_size > 0) {
                    $message = "تم إنشاء نسخة احتياطية بنجاح في: " . realpath($backup_file) . 
                              " (الحجم: " . round($file_size / 1024, 2) . " كيلوبايت)";
                    
                    // عرض رابط للتحميل إذا كان يعمل على الخادم
                    if ($_SERVER['SERVER_NAME'] != 'localhost') {
                        $message .= "<br><a href='" . htmlspecialchars($backup_file) . "' download class='btn btn-success mt-2'>تحميل النسخة الاحتياطية</a>";
                    }
                } else {
                    $message = "تم إنشاء الملف ولكن حجمه صفر! تحقق من الأمر أو الأذونات.";
                    error_log("Backup output: " . implode("\n", $output));
                }
            } else {
                $message = "فشل إنشاء النسخة الاحتياطية. تحقق من بيانات الاتصال أو الأذونات.";
                error_log("Backup failed: " . implode("\n", $output));
            }
        }
    } elseif (isset($_POST['restore_backup'])) {
        $restore_file = $_FILES['restore_file']['tmp_name'];
        if (is_uploaded_file($restore_file)) {
            $command = "$mysql_path -h {$host} -u {$username} --password={$password} {$dbname} < " . escapeshellarg($restore_file) . " 2>&1";
            exec($command, $output, $return_var);

            if ($return_var === 0) {
                $message = "تم استعادة قاعدة البيانات بنجاح.";
            } else {
                $message = "فشل استعادة قاعدة البيانات. تحقق من الملف أو بيانات الاتصال.";
                error_log("Restore failed: " . implode("\n", $output));
            }
        } else {
            $message = "يرجى رفع ملف نسخ احتياطية صالح.";
        }
    } elseif (isset($_POST['logout'])) {
        // تنفيذ النسخ الاحتياطي التلقائي عند الخروج
        if (is_dir($backup_dir) && is_writable($backup_dir)) {
            $backup_file = $backup_dir . 'auto_backup_' . date('Y-m-d_H-i-s') . '.sql';
            $command = "$mysqldump_path -h {$host} -u {$username} --password={$password} {$dbname} > " . escapeshellarg($backup_file) . " 2>&1";
            exec($command, $output, $return_var);

            if ($return_var === 0 && file_exists($backup_file) && filesize($backup_file) > 0) {
                $message = "تم إنشاء نسخة احتياطية تلقائية بنجاح قبل الخروج: " . realpath($backup_file);
            } else {
                $message = "فشل إنشاء النسخة الاحتياطية التلقائية.";
                error_log("Auto backup failed: " . implode("\n", $output));
            }
        } else {
            $message = "المجلد الافتراضي غير قابل للكتابة أو غير موجود.";
        }
        session_destroy();
        header("Location: index.php");
        exit();
    }
}
?>

<!DOCTYPE html>
<html lang="ar">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Astra - النسخ الاحتياطي</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: #f8f9fa;
            direction: rtl;
        }
        .card {
            border-radius: 15px;
            box-shadow: 0 6px 15px rgba(0,0,0,0.1);
        }
        .btn-backup {
            background: linear-gradient(45deg, #28a745, #20c997);
            border: none;
        }
        .btn-restore {
            background: linear-gradient(45deg, #ffc107, #fd7e14);
            border: none;
        }
        .btn-logout {
            background: linear-gradient(45deg, #dc3545, #fd7e14);
            border: none;
        }
        .form-control {
            border-radius: 10px;
        }
    </style>
</head>
<body class="bg-light">
    <div class="container py-5">
        <div class="card shadow-sm p-4 mb-5 bg-white rounded">
            <h2 class="text-center mb-4 text-primary">
                <i class="fas fa-database"></i> نظام النسخ الاحتياطي
            </h2>
            
            <?php if (!empty($message)): ?>
                <div class="alert <?= strpos($message, 'نجاح') !== false ? 'alert-success' : 'alert-danger' ?>">
                    <?= $message ?>
                </div>
            <?php endif; ?>

            <div class="row">
                <div class="col-md-6">
                    <form method="POST" class="mb-4">
                        <div class="mb-3">
                            <label class="form-label">
                                <i class="fas fa-folder-open"></i> مسار حفظ النسخة الاحتياطية
                            </label>
                            <input type="text" class="form-control" name="backup_dir" 
                                   placeholder="اتركه فارغاً للاستخدام الافتراضي: <?= realpath($backup_dir) ?>">
                        </div>
                        <button type="submit" name="create_backup" class="btn btn-backup btn-block text-white">
                            <i class="fas fa-save"></i> إنشاء نسخة احتياطية
                        </button>
                    </form>
                </div>
                
                <div class="col-md-6">
                    <form method="POST" enctype="multipart/form-data" class="mb-4">
                        <div class="mb-3">
                            <label class="form-label">
                                <i class="fas fa-file-upload"></i> استعادة من نسخة احتياطية
                            </label>
                            <input type="file" class="form-control" name="restore_file" accept=".sql" required>
                        </div>
                        <button type="submit" name="restore_backup" class="btn btn-restore btn-block text-white">
                            <i class="fas fa-upload"></i> استعادة النسخة الاحتياطية
                        </button>
                    </form>
                </div>
            </div>
            
            <div class="text-center mt-4">
                <form method="POST">
                    <button type="submit" name="logout" class="btn btn-logout text-white" 
                            onclick="return confirm('سيتم إنشاء نسخة احتياطية تلقائية قبل الخروج. هل أنت متأكد؟')">
                        <i class="fas fa-sign-out-alt"></i> تسجيل الخروج
                    </button>
                </form>
            </div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>