<?php
require_once __DIR__ . '/../config/db.php';
require_once __DIR__ . '/../src/auth.php';
require_login();

$lang = $_GET['lang'] ?? 'en';
$is_ar = $lang === 'ar';
$dir = $is_ar ? 'rtl' : 'ltr';
$backupDir = __DIR__ . '/backups';
if (!is_dir($backupDir)) mkdir($backupDir, 0777, true);

function esc($v){ return htmlspecialchars($v ?? '', ENT_QUOTES, 'UTF-8'); }

$msg = '';
$error = '';

// Handle restore action
if (isset($_GET['restore'])) {
    $file = basename($_GET['restore']);
    $path = $backupDir . '/' . $file;

    if (!file_exists($path)) {
        $error = $is_ar ? 'الملف غير موجود.' : 'Backup file not found.';
    } else {
        try {
            // 1️⃣ إنشاء نسخة أمان قبل الاستعادة
            $date = date('Y-m-d_His');
            $backupBefore = $backupDir . "/_before_restore_$date.sql";
            $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
            $dump = "-- Backup before restore: $date\nSET FOREIGN_KEY_CHECKS=0;\n\n";
            foreach ($tables as $tbl) {
                $create = $pdo->query("SHOW CREATE TABLE `$tbl`")->fetch(PDO::FETCH_ASSOC);
                $dump .= "DROP TABLE IF EXISTS `$tbl`;\n" . $create['Create Table'] . ";\n\n";
                $rows = $pdo->query("SELECT * FROM `$tbl`")->fetchAll(PDO::FETCH_ASSOC);
                foreach ($rows as $r) {
                    $vals = array_map(fn($v)=>$pdo->quote($v), array_values($r));
                    $dump .= "INSERT INTO `$tbl` VALUES(" . implode(',', $vals) . ");\n";
                }
                $dump .= "\n";
            }
            $dump .= "SET FOREIGN_KEY_CHECKS=1;\n";
            file_put_contents($backupBefore, $dump);

            // 2️⃣ فك الضغط
            $zip = new ZipArchive();
            $tmpSql = null;
            if ($zip->open($path) === TRUE) {
                $zip->extractTo($backupDir);
                $tmpSql = $backupDir . '/' . str_replace('.zip', '.sql', $file);
                $zip->close();
            } elseif (str_ends_with($file, '.sql')) {
                $tmpSql = $path;
            }

            if (!$tmpSql || !file_exists($tmpSql)) {
                throw new Exception('SQL file not found inside backup.');
            }

            // 3️⃣ تنفيذ الاستعادة
            $pdo->exec("SET FOREIGN_KEY_CHECKS=0;");
            $sql = file_get_contents($tmpSql);
            $pdo->exec($sql);
            $pdo->exec("SET FOREIGN_KEY_CHECKS=1;");

            // حذف الملف المؤقت
            if (str_ends_with($file, '.zip') && file_exists($tmpSql)) unlink($tmpSql);

            $msg = $is_ar ? '✅ تم استعادة النسخة الاحتياطية بنجاح.' : '✅ Backup restored successfully.';

        } catch (Exception $e) {
            $error = '❌ ' . $e->getMessage();
        }
    }
}

// Get available backups
$backups = array_values(array_filter(scandir($backupDir), fn($f)=>preg_match('/\.(zip|sql)$/i', $f)));
rsort($backups);
?>
<!doctype html>
<html lang="<?= $is_ar ? 'ar' : 'en' ?>" dir="<?= $dir ?>">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title><?= $is_ar ? 'استعادة النسخ الاحتياطي' : 'Restore Backup' ?></title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
body { background-color: #f8f9fa; font-family: 'Tajawal', sans-serif; }
.card { border: none; border-radius: 15px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); max-width: 700px; margin: 60px auto; }
.table { background: white; border-radius: 10px; overflow: hidden; }
.btn { border-radius: 8px; }
</style>
</head>
<body>
<div class="container">
  <div class="card p-4">
    <h4 class="mb-3 text-center"><i class="fa fa-database text-primary"></i> <?= $is_ar ? 'استعادة النسخ الاحتياطية' : 'Database Backup Restore' ?></h4>
    <?php if($msg): ?><div class="alert alert-success"><?= esc($msg) ?></div><?php endif; ?>
    <?php if($error): ?><div class="alert alert-danger"><?= esc($error) ?></div><?php endif; ?>

    <?php if(empty($backups)): ?>
      <div class="alert alert-info text-center"><?= $is_ar ? 'لا توجد نسخ احتياطية حالياً.' : 'No backups found yet.' ?></div>
    <?php else: ?>
    <div class="table-responsive">
      <table class="table table-bordered table-hover">
        <thead class="table-light">
          <tr>
            <th>#</th>
            <th><?= $is_ar ? 'الملف' : 'File' ?></th>
            <th><?= $is_ar ? 'التاريخ' : 'Date' ?></th>
            <th><?= $is_ar ? 'العمليات' : 'Actions' ?></th>
          </tr>
        </thead>
        <tbody>
          <?php foreach($backups as $i=>$b): ?>
          <tr>
            <td><?= $i+1 ?></td>
            <td><?= esc($b) ?></td>
            <td><?= date('Y-m-d H:i', filemtime($backupDir . '/' . $b)) ?></td>
            <td>
              <a href="?restore=<?= urlencode($b) ?>&lang=<?= $lang ?>" class="btn btn-sm btn-danger" onclick="return confirm('<?= $is_ar ? 'هل أنت متأكد من استعادة هذه النسخة؟ سيتم حذف البيانات الحالية.' : 'Are you sure? This will overwrite current data.' ?>')">
                <i class="fa fa-rotate-left"></i> <?= $is_ar ? 'استعادة' : 'Restore' ?>
              </a>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>

    <div class="text-center mt-3">
      <a href="index.php?lang=<?= $lang ?>" class="btn btn-secondary"><i class="fa fa-arrow-left"></i> <?= $is_ar ? 'عودة' : 'Back' ?></a>
    </div>
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/js/all.min.js"></script>
</body>
</html>
