<?php
$page_title = 'حملات الرسائل';
$UA_FORCE_DESIGN_V2 = true;
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/helpers.php';
require_once __DIR__ . '/security.php';
require_once __DIR__ . '/db_bootstrap.php';
require_once __DIR__ . '/messages_lib.php';

require_login();
$conn = ensure_db(true);
if (function_exists('require_perm')) require_perm('can_manage_messages');
ensure_message_queue_tables($conn);

$campaignFlash = $_SESSION['message_campaign_flash'] ?? null;
unset($_SESSION['message_campaign_flash']);

$campaignAction = strtolower(trim((string)($_POST['action'] ?? '')));
if ($_SERVER['REQUEST_METHOD'] === 'POST' && in_array($campaignAction, ['pause','resume','delete'], true)) {
  $campaignId = (int)($_POST['campaign_id'] ?? 0);
  if (function_exists('ua_csrf_verify') && !ua_csrf_verify()) {
    $result = ['ok'=>false,'error'=>'انتهت صلاحية الطلب. أعد تحميل الصفحة وحاول مجدداً.'];
  } elseif ($campaignId <= 0) {
    $result = ['ok'=>false,'error'=>'الحملة المحددة غير صالحة.'];
  } elseif ($campaignAction === 'pause') {
    $result = messages_campaign_pause($conn, $campaignId);
  } elseif ($campaignAction === 'resume') {
    $result = messages_campaign_resume($conn, $campaignId);
  } else {
    $result = messages_campaign_delete($conn, $campaignId);
  }

  $_SESSION['message_campaign_flash'] = [
    'type'=>!empty($result['ok']) ? 'success' : 'danger',
    'message'=>(string)($result['message'] ?? $result['error'] ?? 'تعذر تنفيذ الإجراء.'),
  ];
  header('Location: messages_campaigns.php');
  exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'create') {
  $title = trim((string)($_POST['title'] ?? ''));
  $templateKey = trim((string)($_POST['template_key'] ?? ''));
  $channel = strtolower(trim((string)($_POST['channel'] ?? 'whatsapp')));
  $audience = strtolower(trim((string)($_POST['audience'] ?? 'all')));
  $exclude = $_POST['exclude'] ?? [];
  if (!is_array($exclude)) $exclude = [$exclude];
  $filters = messages_campaign_normalize_filters(['audience'=>$audience,'exclude'=>$exclude]);
  $error = '';

  if (function_exists('ua_csrf_verify') && !ua_csrf_verify()) {
    $error = 'انتهت صلاحية الطلب. أعد تحميل الصفحة وحاول مجدداً.';
  } elseif ($title === '' || $templateKey === '') {
    $error = 'أدخل عنوان الحملة واختر قالب الرسالة.';
  } elseif (!in_array($channel, ['sms','whatsapp','both'], true)) {
    $error = 'قناة الإرسال غير صالحة.';
  } elseif (!in_array($audience, ['all','active','stopped','has_phone'], true)) {
    $error = 'الجمهور المحدد غير صالح.';
  } elseif (in_array('unpaid_invoices', $filters['exclude'], true)
      && in_array('no_unpaid_invoices', $filters['exclude'], true)) {
    $error = 'لا يمكن استثناء ذوي المستحقات القائمة والمسدّدين بالكامل في الحملة نفسها.';
  } elseif (in_array('complete_profile', $filters['exclude'], true)
      && in_array('incomplete_profile', $filters['exclude'], true)) {
    $error = 'لا يمكن استثناء أصحاب المعلومات المكتملة والناقصة في الحملة نفسها.';
  } elseif (!messages_load_template($conn, $templateKey)) {
    $error = 'قالب الرسالة غير موجود أو غير مفعّل.';
  }

  if ($error === '') {
    $filtersJson = json_encode($filters, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
    if ($filtersJson === false) $filtersJson = '{}';
    $uid = (int)($_SESSION['admin_user_id'] ?? $_SESSION['admin_id'] ?? 0);
    $actor = $uid > 0 ? $uid : null;
    $statement = $conn->prepare("INSERT INTO message_campaigns
      (title,template_key,channel,filters_json,status,created_by)
      VALUES (?,?,?,?,'DRAFT',?)");
    if ($statement) {
      $statement->bind_param('ssssi', $title, $templateKey, $channel, $filtersJson, $actor);
      if (!$statement->execute()) $error = 'تعذر إنشاء الحملة في قاعدة البيانات.';
      $statement->close();
    } else {
      $error = 'تعذر تجهيز إنشاء الحملة.';
    }
  }

  $_SESSION['message_campaign_flash'] = [
    'type'=>$error === '' ? 'success' : 'danger',
    'message'=>$error === '' ? 'تم إنشاء الحملة. أضف جمهورها إلى الطابور عندما تصبح جاهزة.' : $error,
  ];
  header('Location: messages_campaigns.php');
  exit;
}

$tpls = get_message_templates($conn);
$camps = $conn->query("SELECT c.*,
    COALESCE(q.pending_count,0) AS actual_queued_count,
    COALESCE(q.paused_count,0) AS actual_paused_count,
    COALESCE(q.sent_count,0) AS actual_sent_count,
    COALESCE(q.failed_count,0) AS actual_failed_count
  FROM message_campaigns c
  LEFT JOIN (
    SELECT campaign_id,
      COUNT(DISTINCT CASE WHEN status IN ('QUEUED','RETRY','SENDING') THEN subscriber_id END) AS pending_count,
      COUNT(DISTINCT CASE WHEN status='PAUSED' THEN subscriber_id END) AS paused_count,
      COUNT(DISTINCT CASE WHEN status='SENT' THEN subscriber_id END) AS sent_count,
      COUNT(DISTINCT CASE WHEN status='FAILED' THEN subscriber_id END) AS failed_count
    FROM message_outbox
    WHERE campaign_id IS NOT NULL
    GROUP BY campaign_id
  ) q ON q.campaign_id=c.id
  ORDER BY c.id DESC LIMIT 100");

require_once __DIR__ . '/header.php';
require_once __DIR__ . '/sidebar.php';
$active_tab = 'campaigns';
include __DIR__ . '/messages_tabs.php';
echo '<div class="content-wrapper ua-manual-page"><section class="content"><div class="container-fluid"><div class="ua-msg-page">';
?>

<div class="ua-card ua-clean-card-pad">
  <h2 class="ua-u-title-gap10">حملات الرسائل</h2>
  <?php if (is_array($campaignFlash) && !empty($campaignFlash['message'])): ?>
    <div class="ua-alert <?= ($campaignFlash['type'] ?? '') === 'success' ? 'ua-ok' : 'ua-bad' ?>">
      <?= h((string)$campaignFlash['message']) ?>
    </div>
  <?php endif; ?>

  <form method="post" class="ua-grid ua-msg-campaign-form">
    <?php if (function_exists('ua_csrf_field')) ua_csrf_field(); ?>
    <input type="hidden" name="action" value="create" />
    <div>
      <label class="ua-u-fw-800">عنوان الحملة</label>
      <input class="ua-input" name="title" placeholder="مثال: تذكير تسديد شهر آذار" required />
    </div>
    <div>
      <label class="ua-u-fw-800">القالب</label>
      <select class="ua-input" name="template_key" required>
        <option value="">— اختر —</option>
        <?php foreach($tpls as $k=>$t): ?>
          <option value="<?= htmlspecialchars($k) ?>"><?= htmlspecialchars($k.' — '.($t['title'] ?? '')) ?></option>
        <?php endforeach; ?>
      </select>
    </div>
    <div>
      <label class="ua-u-fw-800">القناة</label>
      <select class="ua-input" name="channel">
        <option value="whatsapp">WhatsApp</option>
        <option value="sms">SMS</option>
        <option value="both">WhatsApp + SMS</option>
      </select>
    </div>
    <div>
      <label class="ua-u-fw-800">الجمهور</label>
      <select class="ua-input" name="audience">
        <option value="all">كل المشتركين</option>
        <option value="active">المشتركين النشطين</option>
        <option value="stopped">المشتركين المتوقفين</option>
        <option value="has_phone">فقط من لديهم رقم</option>
      </select>
    </div>
    <div>
      <label class="ua-u-fw-800">استبعاد حسب الحساب</label>
      <select class="ua-input" name="exclude[]">
        <option value="">دون استبعاد</option>
        <option value="unpaid_invoices">ذوو المستحقات القائمة</option>
        <option value="no_unpaid_invoices">المسدّدون بالكامل</option>
      </select>
    </div>
    <div>
      <label class="ua-u-fw-800">استبعاد حسب اكتمال البيانات</label>
      <select class="ua-input" name="exclude[]" title="المعلومات المكتملة: الاسم، رقم صالح، حساب PPPoE، وثيقة، وعنوان">
        <option value="">دون استبعاد حسب المعلومات</option>
        <option value="complete_profile">استبعاد مكتملة المعلومات</option>
        <option value="incomplete_profile">استبعاد ناقصة المعلومات</option>
      </select>
    </div>
    <div>
      <button class="ua-btn" type="submit">إنشاء</button>
    </div>
  </form>

  <div class="ua-u-table-scroll mt-ua-table-scroll">
    <table class="ua-table ua-msg-campaign-table">
      <thead>
        <tr>
          <th>الحملة</th>
          <th>القناة</th>
          <th>الحالة</th>
          <th>الإحصاءات</th>
          <th>إجراءات</th>
        </tr>
      </thead>
      <tbody>
      <?php if($camps && $camps->num_rows): while($c = $camps->fetch_assoc()): ?>
        <?php
          $campaignFilters = messages_campaign_normalize_filters(ml_safe_json_decode($c['filters_json'] ?? ''));
          $excludeLabels = [
            'unpaid_invoices'=>'ذوو المستحقات القائمة',
            'no_unpaid_invoices'=>'المسدّدون بالكامل',
            'complete_profile'=>'معلوماتهم مكتملة',
            'incomplete_profile'=>'معلوماتهم ناقصة',
          ];
          $campaignExclusions = array_map(
            static fn(string $key): string => $excludeLabels[$key] ?? $key,
            $campaignFilters['exclude']
          );
          $campaignStatus = strtoupper(trim((string)($c['status'] ?? 'DRAFT')));
          $isPaused = $campaignStatus === 'PAUSED';
          $statusLabels = [
            'DRAFT'=>'مسودة',
            'QUEUED'=>'في الطابور',
            'PAUSED'=>'موقوفة',
            'COMPLETED'=>'مكتملة',
            'COMPLETED_WITH_ERRORS'=>'مكتملة مع أخطاء',
          ];
          $channelLabels = [
            'sms'=>'SMS',
            'whatsapp'=>'واتساب',
            'both'=>'واتساب + SMS',
          ];
        ?>
        <tr>
          <td>
            <b><?= h((string)$c['title']) ?></b>
            <small class="d-block text-muted">#<?= (int)$c['id'] ?> · <?= h((string)($c['template_key'] ?? '')) ?></small>
            <?php if ($campaignExclusions): ?>
              <small class="d-block text-muted">الاستثناءات: <?= h(implode('، ', $campaignExclusions)) ?></small>
            <?php endif; ?>
          </td>
          <td><?= h((string)($channelLabels[strtolower((string)($c['channel'] ?? ''))] ?? ($c['channel'] ?? ''))) ?></td>
          <td><b><?= h((string)($statusLabels[$campaignStatus] ?? $campaignStatus)) ?></b></td>
          <td>
            <span class="d-inline-block ml-2">المستهدفون <b><?= (int)$c['total_targets'] ?></b></span>
            <span class="d-inline-block ml-2">في الطابور <b><?= (int)($c['actual_queued_count'] ?? 0) ?></b></span>
            <?php if ((int)($c['actual_paused_count'] ?? 0) > 0): ?>
              <span class="d-inline-block ml-2">موقوفة <b><?= (int)$c['actual_paused_count'] ?></b></span>
            <?php endif; ?>
            <span class="d-inline-block ml-2">المرسل <b><?= (int)($c['actual_sent_count'] ?? 0) ?></b></span>
            <span class="d-inline-block">الفشل <b><?= (int)($c['actual_failed_count'] ?? ($c['failed_count'] ?? 0)) ?></b></span>
          </td>
          <td>
            <div class="ua-campaign-actions">
              <button class="ua-btn ua-btn-primary" type="button" data-act="queue" data-id="<?= (int)$c['id'] ?>" <?= $isPaused ? 'disabled' : '' ?>>إضافة للطابور</button>
              <button class="ua-btn" type="button" data-act="run" data-id="<?= (int)$c['id'] ?>" <?= $isPaused ? 'disabled' : '' ?>>بدء الإرسال</button>
              <form method="post">
                <?php if (function_exists('ua_csrf_field')) ua_csrf_field(); ?>
                <input type="hidden" name="campaign_id" value="<?= (int)$c['id'] ?>">
                <input type="hidden" name="action" value="<?= $isPaused ? 'resume' : 'pause' ?>">
                <button class="ua-btn ua-btn-warning" type="submit">
                  <?= $isPaused ? 'استئناف الحملة' : 'إيقاف الحملة' ?>
                </button>
              </form>
              <form method="post" onsubmit="return confirm('حذف الحملة ورسائلها غير المرسلة؟ سيبقى سجل الرسائل المرسلة والفاشلة محفوظاً.');">
                <?php if (function_exists('ua_csrf_field')) ua_csrf_field(); ?>
                <input type="hidden" name="campaign_id" value="<?= (int)$c['id'] ?>">
                <input type="hidden" name="action" value="delete">
                <button class="ua-btn ua-btn-danger" type="submit">حذف الحملة</button>
              </form>
            </div>
          </td>
        </tr>
      <?php endwhile; else: ?>
        <tr><td class="ua-u-empty-center" colspan="5">لا توجد حملات</td></tr>
      <?php endif; ?>
      </tbody>
    </table>
  </div>

  <div class="ua-u-mt-10" id="campRes"></div>
</div>

<script>
(async function(){
  const out = document.getElementById('campRes');
  const csrf = <?= json_encode(function_exists('ua_csrf_token') ? ua_csrf_token() : '', JSON_UNESCAPED_SLASHES) ?>;
  const esc = value => String(value ?? '').replace(/[&<>"']/g, ch => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[ch]));
  document.querySelectorAll('button[data-act]').forEach(btn=>{
    btn.addEventListener('click', async ()=>{
      const id = btn.getAttribute('data-id');
      const act = btn.getAttribute('data-act');
      btn.disabled = true;
      out.innerHTML = '<div class="ua-alert">جارٍ التنفيذ...</div>';
      try{
        if(act==='queue'){
          const body = new URLSearchParams({campaign_id:id, ua_csrf:csrf});
          const r = await fetch('api/message_campaign_queue.php', {method:'POST', body, credentials:'same-origin'});
          const j = await r.json();
          if(j.ok){
            const message = j.queued > 0
              ? `تمت إضافة ${j.queued} رسالة. المتبقي ${j.remaining_targets} مشترك.`
              : 'لا توجد رسائل جديدة لإضافتها؛ جرى تجهيز جمهور الحملة مسبقاً.';
            out.innerHTML = `<div class="ua-alert ua-ok">${esc(message)}</div>`;
            setTimeout(()=>location.reload(), 700);
          } else out.innerHTML = `<div class="ua-alert ua-bad">${esc(j.error||j.message||'فشل')}</div>`;
        } else {
          const body = new URLSearchParams({action:'start', campaign_id:id, ua_csrf:csrf});
          const r = await fetch('api/message_queue_run.php', {method:'POST', body, credentials:'same-origin'});
          const j = await r.json();
          if(j.ok){
            out.innerHTML = `<div class="ua-alert ua-ok">${esc(j.message || 'تم تجهيز دورة الإرسال. انتقل إلى صندوق الإرسال للمتابعة.')}</div>`;
            setTimeout(()=>{ location.href='messages_outbox.php'; }, 700);
          } else out.innerHTML = `<div class="ua-alert ua-bad">${esc(j.error||j.message||'فشل')}</div>`;
        }
      }catch(e){
        out.innerHTML = `<div class="ua-alert ua-bad">${esc(e.message)}</div>`;
      }finally{
        btn.disabled = false;
      }
    });
  });
})();
</script>

</div></div></section></div>
<?php require_once __DIR__ . '/footer.php'; ?>
