<?php
@ini_set('display_errors', '0');
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);

if (session_status() === PHP_SESSION_NONE) session_start();

$page_title = 'تصفير سجلات المشتركين';
require_once __DIR__ . '/helpers.php';
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/db_bootstrap.php';
require_once __DIR__ . '/super_admin_guard.php';
require_once __DIR__ . '/subscriber_history_lib.php';

require_login('index.php?login=1');
if (function_exists('require_perm')) require_perm('can_manage_subscribers');

if (function_exists('ensure_db')) ensure_db(true);
$conn = $GLOBALS['conn'] ?? null;
if (!($conn instanceof mysqli)) { http_response_code(500); die('Database connection error'); }

@mysqli_report(MYSQLI_REPORT_OFF);
if (function_exists('sh_ensure_schema')) sh_ensure_schema($conn);

if (!function_exists('h')) {
  function h($v): string { return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); }
}

if (!function_exists('sh_table_exists')) {
  function sh_table_exists(mysqli $conn, string $table): bool {
    $t = $conn->real_escape_string($table);
    $rs = @$conn->query("SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='$t' LIMIT 1");
    return (bool)($rs && $rs->num_rows > 0);
  }
}
if (!function_exists('sh_col_exists')) {
  function sh_col_exists(mysqli $conn, string $table, string $col): bool {
    $t = $conn->real_escape_string($table);
    $c = $conn->real_escape_string($col);
    $rs = @$conn->query("SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='$t' AND COLUMN_NAME='$c' LIMIT 1");
    return (bool)($rs && $rs->num_rows > 0);
  }
}

function ua_history_clear_count(mysqli $conn, string $table, string $where = '1=1'): int {
  if (!sh_table_exists($conn, $table)) return 0;
  $safeTable = preg_replace('/[^a-zA-Z0-9_]/', '', $table);
  if ($safeTable === '') return 0;
  $rs = @$conn->query("SELECT COUNT(*) AS c FROM `$safeTable` WHERE $where");
  if (!$rs) return 0;
  $row = $rs->fetch_assoc();
  return (int)($row['c'] ?? 0);
}

function ua_history_clear_delete(mysqli $conn, string $sql): int {
  $ok = @$conn->query($sql);
  if (!$ok) return -1;
  return max(0, (int)$conn->affected_rows);
}

function ua_history_clear_first_activation_where(): string {
  return "(UPPER(COALESCE(action_key,'')) IN ('FIRST_ACTIVATED','FIRST_ACTIVATION') OR COALESCE(action_label,'') LIKE '%أول تفعيل%' OR COALESCE(details,'') LIKE '%أول ظهور للمشترك%')";
}

function ua_history_clear_action_log_where(mysqli $conn): string {
  if (!sh_table_exists($conn, 'action_log') || !sh_col_exists($conn, 'action_log', 'action_key')) return '0=1';
  return "UPPER(COALESCE(action_key,'')) LIKE '%SUBSCRIBER%'";
}

function ua_history_clear_jobs_where(mysqli $conn): string {
  if (!sh_table_exists($conn, 'subscribers_action_jobs')) return '0=1';
  if (sh_col_exists($conn, 'subscribers_action_jobs', 'status')) {
    return "LOWER(COALESCE(status,'')) IN ('done','partial','failed','cancelled')";
  }
  return '0=1';
}

$tokenKey = 'ua_history_clear_token';
$isPost = strtoupper((string)($_SERVER['REQUEST_METHOD'] ?? 'GET')) === 'POST';

if ($isPost) {
  $sentToken = (string)($_POST['clear_token'] ?? '');
  $realToken = (string)($_SESSION[$tokenKey] ?? '');
  if ($sentToken === '' || $realToken === '' || !hash_equals($realToken, $sentToken)) {
    require_super_admin_confirmation('تصفير سجلات المشتركين');
  }
} else {
  require_super_admin_confirmation('تصفير سجلات المشتركين');
  $_SESSION[$tokenKey] = bin2hex(random_bytes(24));
}

$firstWhere = ua_history_clear_first_activation_where();
$activityTotal = ua_history_clear_count($conn, 'subscriber_activity_log');
$firstActivationTotal = ua_history_clear_count($conn, 'subscriber_activity_log', $firstWhere);
$subscriberActionWhere = ua_history_clear_action_log_where($conn);
$subscriberActionTotal = ua_history_clear_count($conn, 'action_log', $subscriberActionWhere);
$jobsWhere = ua_history_clear_jobs_where($conn);
$finishedJobsTotal = ua_history_clear_count($conn, 'subscribers_action_jobs', $jobsWhere);

$result = null;
$error = '';

if ($isPost) {
  $mode = (string)($_POST['clear_mode'] ?? '');
  $confirm = (string)($_POST['confirm_clear'] ?? '');

  if (!in_array($mode, ['all', 'keep_first_activation'], true)) {
    $error = 'اختر نوع التصفير المطلوب.';
  } elseif ($confirm !== '1') {
    $error = 'يجب تأكيد أنك تريد تنفيذ عملية التصفير.';
  } else {
    unset($_SESSION[$tokenKey]);

    $deletedActivity = 0;
    $deletedActionLog = 0;
    $deletedJobs = 0;
    $errors = [];

    if (sh_table_exists($conn, 'subscriber_activity_log')) {
      if ($mode === 'all') {
        $n = ua_history_clear_delete($conn, "DELETE FROM subscriber_activity_log");
        if ($n < 0) $errors[] = 'فشل حذف سجل الحركات الأساسي: ' . ($conn->error ?? ''); else $deletedActivity = $n;
        @ $conn->query("ALTER TABLE subscriber_activity_log AUTO_INCREMENT=1");
      } else {
        $n = ua_history_clear_delete($conn, "DELETE FROM subscriber_activity_log WHERE NOT $firstWhere");
        if ($n < 0) $errors[] = 'فشل حذف سجل الحركات الأساسي: ' . ($conn->error ?? ''); else $deletedActivity = $n;
      }
    }

    if (sh_table_exists($conn, 'action_log') && sh_col_exists($conn, 'action_log', 'action_key')) {
      $n = ua_history_clear_delete($conn, "DELETE FROM action_log WHERE $subscriberActionWhere");
      if ($n < 0) $errors[] = 'فشل حذف السجلات المساندة من action_log: ' . ($conn->error ?? ''); else $deletedActionLog = $n;
    }

    if (sh_table_exists($conn, 'subscribers_action_jobs') && $jobsWhere !== '0=1') {
      $n = ua_history_clear_delete($conn, "DELETE FROM subscribers_action_jobs WHERE $jobsWhere");
      if ($n < 0) $errors[] = 'فشل حذف سجلات المهام المنتهية: ' . ($conn->error ?? ''); else $deletedJobs = $n;
    }

    if ($errors) {
      $error = implode(' — ', array_filter($errors));
      $_SESSION[$tokenKey] = bin2hex(random_bytes(24));
    } else {
      $result = [
        'mode' => $mode,
        'deleted_activity' => $deletedActivity,
        'deleted_action_log' => $deletedActionLog,
        'deleted_jobs' => $deletedJobs,
      ];
      $_SESSION[$tokenKey] = bin2hex(random_bytes(24));

      $activityTotal = ua_history_clear_count($conn, 'subscriber_activity_log');
      $firstActivationTotal = ua_history_clear_count($conn, 'subscriber_activity_log', $firstWhere);
      $subscriberActionTotal = ua_history_clear_count($conn, 'action_log', $subscriberActionWhere);
      $finishedJobsTotal = ua_history_clear_count($conn, 'subscribers_action_jobs', $jobsWhere);
    }
  }
}

$token = (string)($_SESSION[$tokenKey] ?? '');
if ($token === '') {
  $_SESSION[$tokenKey] = bin2hex(random_bytes(24));
  $token = (string)$_SESSION[$tokenKey];
}

$UA_FORCE_DESIGN_V2 = true;
require_once __DIR__ . '/header.php';
require_once __DIR__ . '/sidebar.php';
?>
<div class="content-wrapper ua-manual-page ua-subscriber-child-page ua-sub-child-history-clear">
  <section class="content">
    <div class="ua-page-v2">
      <header class="ua-page-head">
        <div class="ua-page-title">
          <h1>تصفير سجلات المشتركين</h1>
          <p>أداة إدارية لحذف سجلات الحركات فقط دون تعديل بيانات المشتركين أو الفواتير.</p>
        </div>
        <div class="ua-page-actions">
          <a href="subscribers.php" class="btn btn-secondary"><i class="fa fa-arrow-right"></i> رجوع للقائمة</a>
        </div>
      </header>

    <section class="ua-panel-v2">
      <div class="ua-panel-body">
      <div class="ua-child-note">
        هذه العملية تخص سجلات الحركات التي تظهر في نافذة <b>سجل المشترك</b> لكل المشتركين، ولا تغيّر بيانات المشتركين أو حسابات PPP أو الفواتير أو الاستهلاك.
      </div>

      <?php if ($result): ?>
        <div class="ua-alert alert-success">
          تم تنفيذ التصفير بنجاح.<br>
          سجل الحركات الأساسي: <?= (int)$result['deleted_activity'] ?> سطر.<br>
          السجلات المساندة: <?= (int)$result['deleted_action_log'] ?> سطر.<br>
          مهام المشتركين المنتهية: <?= (int)$result['deleted_jobs'] ?> مهمة.
        </div>
      <?php endif; ?>

      <?php if ($error !== ''): ?>
        <div class="ua-alert alert-danger"><?= h($error) ?></div>
      <?php endif; ?>

      <div class="ua-child-metric-grid">
        <div class="ua-child-metric"><b>حركات في السجل الأساسي</b><span><?= (int)$activityTotal ?></span></div>
        <div class="ua-child-metric"><b>حركات أول تفعيل محفوظة</b><span><?= (int)$firstActivationTotal ?></span></div>
        <div class="ua-child-metric"><b>سجلات مساندة تظهر في السجل</b><span><?= (int)($subscriberActionTotal + $finishedJobsTotal) ?></span></div>
      </div>

      <div class="ua-alert alert-danger">
        تنبيه: العملية نهائية ولا يوجد تراجع تلقائي. اختر الخيار المطلوب بدقة قبل التنفيذ.
      </div>

      <form id="uaHistoryClearForm" method="post" action="subscribers_history_clear.php?embed=1&ua_modal=1&ua_sub_modal=1">
        <input type="hidden" name="clear_token" value="<?= h($token) ?>">

        <label class="ua-child-choice">
          <input type="radio" name="clear_mode" value="all" required>
          <strong>تصفير كامل السجل</strong>
          <small>يحذف كل حركات سجل المشتركين بدون استثناء.</small>
        </label>

        <label class="ua-child-choice">
          <input type="radio" name="clear_mode" value="keep_first_activation" required checked>
          <strong>تصفير الحركات مع إبقاء حركة أول تفعيل</strong>
          <small>يحذف الحركات كلها، ويبقي فقط الحركة التي تمثل أول تفعيل/أول ظهور للمشترك أونلاين.</small>
        </label>

        <label class="ua-switch-line">
          <input type="checkbox" name="confirm_clear" value="1" required>
          <span>أؤكد أنني أريد تنفيذ عملية التصفير على كافة المشتركين.</span>
        </label>

        <div class="ua-form-actions">
          <button type="submit" class="btn btn-danger"><i class="fa fa-eraser"></i> تنفيذ التصفير</button>
        </div>
      </form>

      <div class="ua-clear-confirm-backdrop" id="uaHistoryClearConfirm" aria-hidden="true">
        <div class="ua-clear-confirm-box" role="dialog" aria-modal="true" aria-labelledby="uaHistoryClearConfirmTitle">
          <div class="ua-clear-confirm-head" id="uaHistoryClearConfirmTitle">تأكيد العملية</div>
          <div class="ua-clear-confirm-body">
            تأكيد نهائي: هل تريد تصفير سجلات المشتركين؟
            <div class="ua-clear-confirm-actions">
              <button type="button" class="ua-clear-confirm-ok" id="uaHistoryClearConfirmOk">حسناً</button>
              <button type="button" class="ua-clear-confirm-cancel" id="uaHistoryClearConfirmCancel">إلغاء</button>
            </div>
          </div>
        </div>
      </div>

      <script>
      (function(){
        var form = document.getElementById('uaHistoryClearForm');
        var modal = document.getElementById('uaHistoryClearConfirm');
        var ok = document.getElementById('uaHistoryClearConfirmOk');
        var cancel = document.getElementById('uaHistoryClearConfirmCancel');
        var approved = false;
        if(!form || !modal || !ok || !cancel) return;

        function closeConfirm(){
          modal.style.display = 'none';
          modal.setAttribute('aria-hidden','true');
        }
        function openConfirm(){
          modal.style.display = 'flex';
          modal.setAttribute('aria-hidden','false');
          setTimeout(function(){ try{ ok.focus({preventScroll:true}); }catch(e){} }, 40);
        }

        form.addEventListener('submit', function(ev){
          if(approved) return;
          if(form.reportValidity && !form.reportValidity()) return;
          ev.preventDefault();
          ev.stopPropagation();
          openConfirm();
        }, true);

        ok.addEventListener('click', function(){
          approved = true;
          closeConfirm();
          if(form.requestSubmit){ form.requestSubmit(); }
          else { form.submit(); }
        });
        cancel.addEventListener('click', closeConfirm);
        modal.addEventListener('click', function(ev){ if(ev.target === modal) closeConfirm(); });
        document.addEventListener('keydown', function(ev){ if(ev.key === 'Escape' && modal.style.display === 'flex') closeConfirm(); });
      })();
      </script>
      </div>
    </section>
    </div>
  </section>
</div>
<?php require_once __DIR__ . '/footer.php'; ?>
