<?php
// أداة سحب نسخة احتياطية من الاستضافة إلى الجهاز
ini_set('display_errors', 0);
ini_set('max_execution_time', 300);

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['comment'])) {
    $comment = preg_replace('/[^a-zA-Z0-9_\-]/', '_', trim($_POST['comment']));
    if (empty($comment)) $comment = "No_Comment";
    
    $date = date('Y-m-d_H-i');
    $zipFileName = "Backup_{$date}_{$comment}.zip";
    $zipFilePath = __DIR__ . '/' . $zipFileName;
    
    $zip = new ZipArchive();
    if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE) {
        die("فشل في إنشاء الملف المضغوط على السيرفر. تأكد من صلاحيات المجلد.");
    }
    
    // سحب الملفات مع استثناء الداتا الثقيلة
    $dir = new RecursiveDirectoryIterator(__DIR__, RecursiveDirectoryIterator::SKIP_DOTS);
    $iterator = new RecursiveIteratorIterator($dir);
    
    foreach ($iterator as $file) {
        $filePath = $file->getRealPath();
        $ext = strtolower($file->getExtension());
        $filename = $file->getFilename();
        
        // استثناء الملفات الثقيلة والمجلدات غير المطلوبة
        if (in_array($ext, ['sqlite', 'sql', 'zip', 'rar', 'log'])) continue;
        if (strpos($filePath, 'node_modules') !== false) continue;
        if (strpos($filePath, '.git') !== false) continue;
        if ($filename === $zipFileName) continue; // لا تضغط الملف الذي نجهزه الآن
        
        $relativePath = substr($filePath, strlen(__DIR__) + 1);
        $zip->addFile($filePath, $relativePath);
    }
    
    $zip->close();
    
    // إرسال الملف المضغوط كتحميل للمتصفح
    if (file_exists($zipFilePath)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/zip');
        header('Content-Disposition: attachment; filename="' . basename($zipFilePath) . '"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($zipFilePath));
        readfile($zipFilePath);
        
        // حذف الملف من السيرفر بعد التحميل لتوفير المساحة
        unlink($zipFilePath);
        exit;
    }
}
?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
    <meta charset="UTF-8">
    <title>تحميل نسخة احتياطية من السيرفر</title>
    <style>
        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f4f7f6; padding: 50px; text-align: center; }
        .container { background: #fff; padding: 30px; border-radius: 10px; max-width: 500px; margin: auto; box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
        h2 { color: #2c3e50; }
        input[type="text"] { width: 90%; padding: 10px; margin: 15px 0; border: 1px solid #ccc; border-radius: 5px; font-size: 16px; }
        button { background: #27ae60; color: #fff; border: none; padding: 12px 20px; font-size: 18px; border-radius: 5px; cursor: pointer; transition: 0.3s; }
        button:hover { background: #219150; }
        .note { color: #7f8c8d; font-size: 14px; margin-top: 20px; }
    </style>
</head>
<body>
    <div class="container">
        <h2>سحب نسخة الأكواد من السيرفر لجهازك</h2>
        <form method="POST">
            <label style="font-size: 18px; font-weight: bold; color: #34495e;">ماذا قمت بتعديله في الأكواد؟</label>
            <input type="text" name="comment" placeholder="مثال: تعديل_قيد_الخرسانة (يفضل باللغة الإنجليزية أو بدون مسافات)" required>
            <button type="submit">تجهيز وتحميل النسخة (ZIP)</button>
        </form>
        <p class="note">ملاحظة: هذا السكربت يسحب ملفات الكود فقط (يستثني قواعد البيانات الضخمة) ليكون التحميل في ثوانٍ معدودة.</p>
    </div>
</body>
</html>
