<?php
if (session_status() === PHP_SESSION_NONE) session_start();
require_once __DIR__ . '/db_bootstrap.php';
require_once __DIR__ . '/helpers.php';
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/backup_lib.php';

require_login();
require_perm('can_backup');
$conn = ensure_db(true);
ua_backup_ensure_schema($conn);

function ua_backup_format_bytes(int $bytes): string {
  if ($bytes < 1024) return $bytes . ' B';
  if ($bytes < 1048576) return number_format($bytes / 1024, 1) . ' KB';
  if ($bytes < 1073741824) return number_format($bytes / 1048576, 1) . ' MB';
  return number_format($bytes / 1073741824, 2) . ' GB';
}
function ua_backup_status_label(string $status): string {
  return ['success'=>'مكتملة','failed'=>'فاشلة','running'=>'قيد التنفيذ'][$status] ?? $status;
}

$notice = ''; $error = '';
if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST') {
  if (function_exists('ua_csrf_verify') && !ua_csrf_verify()) {
    $error = 'انتهت صلاحية الطلب. أعد تحميل الصفحة.';
  } else {
    $action = (string)($_POST['action'] ?? '');
    if ($action === 'save') {
      $result = ua_backup_save_settings($conn, [
        'enabled'=>!empty($_POST['enabled']),
        'frequency'=>$_POST['frequency'] ?? 'daily',
        'run_time'=>$_POST['run_time'] ?? '02:00',
        'week_day'=>$_POST['week_day'] ?? 1,
        'month_day'=>$_POST['month_day'] ?? 1,
        'destination_path'=>$_POST['destination_path'] ?? '',
        'include_files'=>!empty($_POST['include_files']),
        'include_routers'=>!empty($_POST['include_routers']),
        'retention_count'=>$_POST['retention_count'] ?? 12,
      ]);
      if ($result['ok']) $notice = 'تم حفظ إعدادات النسخ التلقائي.'; else $error = (string)$result['error'];
    } elseif ($action === 'run') {
      @set_time_limit(0);
      $result = ua_backup_run($conn,'manual');
      if (!empty($result['ok'])) {
        $notice = 'اكتملت النسخة الاحتياطية: ' . (string)$result['name'];
        if (!empty($result['warnings'])) $notice .= ' — اكتملت مع ' . count($result['warnings']) . ' تحذير أجهزة.';
      } else $error = (string)($result['error'] ?? 'فشل إنشاء النسخة الاحتياطية.');
    } elseif ($action === 'verify') {
      $result = ua_backup_verify_run($conn,(int)($_POST['run_id'] ?? 0));
      if ($result['ok']) $notice = 'النسخة سليمة وبصمتها مطابقة للسجل.'; else $error = (string)$result['error'];
    } elseif ($action === 'delete') {
      $result = ua_backup_delete_run($conn,(int)($_POST['run_id'] ?? 0));
      if ($result['ok']) $notice = 'تم حذف ملف النسخة وسجلها.'; else $error = (string)$result['error'];
    }
  }
}

$settings = ua_backup_settings($conn);
$runs = ua_backup_runs($conn,50);
$nextRun = ua_backup_next_run($settings);
$last = $runs[0] ?? null;
$successCount = 0; $totalBytes = 0;
foreach ($runs as $run) if (($run['status'] ?? '') === 'success') { $successCount++; $totalBytes += (int)($run['bytes'] ?? 0); }

$page_title = 'النسخ الاحتياطي';
$UA_FORCE_DESIGN_V2 = true;
$UA_PAGE_CSS = ['assets/css/backup_center.css'];
include __DIR__ . '/header.php';
include __DIR__ . '/sidebar.php';
?>
<div class="content-wrapper ua-extracted-page ua-backup-page">
  <main class="uab-shell" dir="rtl">
    <header class="uab-hero">
      <div>
        <span>Backup & Recovery</span>
        <h1><i class="fa fa-shield"></i> النسخ الاحتياطي الشامل</h1>
        <p>قاعدة البيانات كاملة، ملفات المشتركين والقوالب، إعدادات البرنامج، ولقطات إعداد أجهزة RouterOS.</p>
      </div>
      <form method="post" class="uab-run-now">
        <?php if (function_exists('ua_csrf_field')) ua_csrf_field(); ?>
        <input type="hidden" name="action" value="run">
        <button type="submit"><i class="fa fa-database"></i><span><b>إنشاء نسخة الآن</b><small>تشغيل يدوي شامل</small></span></button>
      </form>
    </header>

    <?php if ($notice !== ''): ?><div class="uab-alert is-success"><i class="fa fa-check-circle"></i><?= h($notice) ?></div><?php endif; ?>
    <?php if ($error !== ''): ?><div class="uab-alert is-error"><i class="fa fa-exclamation-triangle"></i><?= h($error) ?></div><?php endif; ?>

    <section class="uab-stats">
      <article><i class="fa fa-clock-o"></i><span>الحالة</span><strong><?= !empty($settings['enabled']) ? 'تلقائي مفعّل' : 'يدوي فقط' ?></strong><small><?= $nextRun ? 'التالي: ' . h($nextRun->format('Y-m-d H:i')) : 'لا يوجد موعد مجدول' ?></small></article>
      <article><i class="fa fa-check"></i><span>النسخ السليمة</span><strong><?= (int)$successCount ?></strong><small>من آخر <?= count($runs) ?> عملية</small></article>
      <article><i class="fa fa-hdd-o"></i><span>الحجم المسجل</span><strong dir="ltr"><?= h(ua_backup_format_bytes($totalBytes)) ?></strong><small><?= h((string)$settings['destination_path']) ?></small></article>
      <article><i class="fa fa-server"></i><span>آخر أجهزة</span><strong><?= $last ? ((int)$last['router_success'] . ' ناجح') : '—' ?></strong><small><?= $last && (int)$last['router_failed'] ? ((int)$last['router_failed'] . ' غير متصل') : 'لا توجد إخفاقات مسجلة' ?></small></article>
    </section>

    <section class="uab-grid">
      <form method="post" class="uab-card uab-settings">
        <?php if (function_exists('ua_csrf_field')) ua_csrf_field(); ?>
        <input type="hidden" name="action" value="save">
        <div class="uab-card-head"><div><span>Automation</span><h2>الجدولة والحفظ</h2></div><i class="fa fa-calendar-check-o"></i></div>
        <label class="uab-switch"><input type="checkbox" name="enabled" value="1" <?= !empty($settings['enabled'])?'checked':'' ?>><span><b>تفعيل النسخ التلقائي</b><small>ينفذه عامل الخلفية دون فتح الصفحة.</small></span></label>
        <div class="uab-fields three">
          <label><span>التكرار</span><select name="frequency" id="uabFrequency"><option value="daily" <?= $settings['frequency']==='daily'?'selected':'' ?>>يومي</option><option value="weekly" <?= $settings['frequency']==='weekly'?'selected':'' ?>>أسبوعي</option><option value="monthly" <?= $settings['frequency']==='monthly'?'selected':'' ?>>شهري</option></select></label>
          <label><span>وقت التنفيذ</span><input type="time" name="run_time" value="<?= h((string)$settings['run_time']) ?>" required></label>
          <label data-week-day><span>يوم الأسبوع</span><select name="week_day"><?php foreach ([1=>'الاثنين',2=>'الثلاثاء',3=>'الأربعاء',4=>'الخميس',5=>'الجمعة',6=>'السبت',7=>'الأحد'] as $v=>$label): ?><option value="<?= $v ?>" <?= (int)$settings['week_day']===$v?'selected':'' ?>><?= $label ?></option><?php endforeach; ?></select></label>
          <label data-month-day><span>يوم الشهر</span><input type="number" min="1" max="28" name="month_day" value="<?= (int)$settings['month_day'] ?>"></label>
        </div>
        <label class="uab-path"><span>مكان الحفظ</span><input name="destination_path" dir="ltr" value="<?= h((string)$settings['destination_path']) ?>" placeholder="C:\NetworkCustomersBackups" required><small>يجب أن يكون مساراً كاملاً يملك خادم البرنامج صلاحية الكتابة فيه.</small></label>
        <div class="uab-options">
          <label><input type="checkbox" name="include_files" value="1" <?= !empty($settings['include_files'])?'checked':'' ?>><span><b>ملفات البرنامج المدخلة</b><small>الهويات، المرفقات، القوالب، العقود ومفاتيح الربط.</small></span></label>
          <label><input type="checkbox" name="include_routers" value="1" <?= !empty($settings['include_routers'])?'checked':'' ?>><span><b>إعدادات RouterOS</b><small>لقطات مستقلة لكل راوتر متاح مع تسجيل الأجهزة غير المتصلة.</small></span></label>
        </div>
        <label class="uab-retention"><span>عدد النسخ المحتفظ بها</span><input type="number" min="2" max="120" name="retention_count" value="<?= (int)$settings['retention_count'] ?>"><small>تحذف النسخ الأقدم تلقائياً بعد تجاوز العدد.</small></label>
        <button class="uab-save" type="submit"><i class="fa fa-save"></i> حفظ إعدادات النسخ</button>
      </form>

      <aside class="uab-card uab-coverage">
        <div class="uab-card-head"><div><span>Coverage</span><h2>ما الذي تحفظه الحزمة؟</h2></div><i class="fa fa-archive"></i></div>
        <ul>
          <li><i class="fa fa-database"></i><span><b>كل جداول قاعدة البيانات</b><small>المشتركون، سجلاتهم، الفواتير، الدفعات، المستخدمون، الصلاحيات وجميع الإعدادات.</small></span></li>
          <li><i class="fa fa-folder-open"></i><span><b>الملفات والمرفقات</b><small>صور الهويات، المستندات، القوالب، العقود وإعدادات النسخة المحلية.</small></span></li>
          <li><i class="fa fa-wifi"></i><span><b>أجهزة الشبكة</b><small>بيانات المستقبلات والمرسلات محفوظة في القاعدة، وإعدادات RouterOS تُلتقط من الجهاز مباشرة.</small></span></li>
          <li><i class="fa fa-check-circle"></i><span><b>فحص سلامة</b><small>بصمة SHA-256 لكل حزمة مع إمكانية التحقق في أي وقت.</small></span></li>
        </ul>
        <div class="uab-note"><i class="fa fa-lock"></i><p><b>تنبيه أمني</b><span>تحتوي النسخة على بيانات حساسة؛ احفظها في قرص محمي ولا تشاركها دون حاجة.</span></p></div>
      </aside>
    </section>

    <section class="uab-card uab-history">
      <div class="uab-card-head"><div><span>Audit Log</span><h2>سجل النسخ الاحتياطية</h2></div><b><?= count($runs) ?></b></div>
      <div class="uab-table-wrap"><table><thead><tr><th>النسخة</th><th>الحالة</th><th>المحتوى</th><th>الأجهزة</th><th>الحجم والبصمة</th><th>الإجراءات</th></tr></thead><tbody>
        <?php if (!$runs): ?><tr><td colspan="6" class="uab-empty">لا توجد عمليات نسخ احتياطي بعد.</td></tr><?php endif; ?>
        <?php foreach ($runs as $run): $warnings=json_decode((string)($run['warnings_json']??''),true); ?>
          <tr>
            <td><strong><?= h((string)($run['file_name'] ?: 'عملية #'.$run['id'])) ?></strong><small><?= h((string)$run['started_at']) ?> · <?= $run['trigger_type']==='scheduled'?'تلقائي':'يدوي' ?></small></td>
            <td><span class="uab-status is-<?= h((string)$run['status']) ?>"><?= h(ua_backup_status_label((string)$run['status'])) ?></span><?php if (!empty($run['error_text'])): ?><small class="is-error-text"><?= h((string)$run['error_text']) ?></small><?php endif; ?></td>
            <td><strong><?= (int)$run['database_tables'] ?> جدول · <?= number_format((int)$run['database_rows']) ?> سجل</strong><small><?= (int)$run['included_files'] ?> ملف مرفق</small></td>
            <td><strong><?= (int)$run['router_success'] ?> ناجح / <?= (int)$run['router_failed'] ?> فشل</strong><small><?= is_array($warnings)&&$warnings ? h((string)$warnings[0]) : 'دون تحذيرات' ?></small></td>
            <td><strong dir="ltr"><?= h(ua_backup_format_bytes((int)$run['bytes'])) ?></strong><small dir="ltr"><?= h(substr((string)$run['checksum_sha256'],0,16)) ?>…</small></td>
            <td><div class="uab-actions"><?php if ($run['status']==='success' && is_file((string)$run['file_path'])): ?><a href="backup_download.php?id=<?= (int)$run['id'] ?>" title="تنزيل"><i class="fa fa-download"></i></a><form method="post"><?php if(function_exists('ua_csrf_field'))ua_csrf_field();?><input type="hidden" name="action" value="verify"><input type="hidden" name="run_id" value="<?= (int)$run['id'] ?>"><button title="تحقق"><i class="fa fa-check-circle"></i></button></form><?php endif; ?><form method="post" onsubmit="return confirm('حذف ملف النسخة وسجلها؟')"><?php if(function_exists('ua_csrf_field'))ua_csrf_field();?><input type="hidden" name="action" value="delete"><input type="hidden" name="run_id" value="<?= (int)$run['id'] ?>"><button class="is-danger" title="حذف"><i class="fa fa-trash"></i></button></form></div></td>
          </tr>
        <?php endforeach; ?>
      </tbody></table></div>
    </section>
  </main>
</div>
<script>
(function(){
  var frequency=document.getElementById('uabFrequency');
  var week=document.querySelector('[data-week-day]');
  var month=document.querySelector('[data-month-day]');
  function sync(){var value=frequency?frequency.value:'daily';if(week)week.hidden=value!=='weekly';if(month)month.hidden=value!=='monthly';}
  if(frequency)frequency.addEventListener('change',sync);sync();
})();
</script>
<?php include __DIR__ . '/footer.php'; ?>

