<?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();
if(function_exists('require_perm')) require_perm('can_manage_messages');
$conn = ensure_db(true);
ensure_message_tables($conn);

$me = $_SESSION['admin_username'] ?? ($_SESSION['admin_user'] ?? '');
$is_super = false;
try {
  $bypass = $GLOBALS['BYPASS_ADMINS'] ?? [];
  $is_super = in_array($me, $bypass, true) || (!empty($_SESSION['perms']['all']));
} catch (Throwable $e) { $is_super = false; }

$flashData = $_SESSION['message_log_flash'] ?? null;
unset($_SESSION['message_log_flash']);
if($_SERVER['REQUEST_METHOD']==='POST' && ($_POST['action'] ?? '')==='delete_range'){
  $flash = '';
  $flashType = 'danger';
  if(function_exists('ua_csrf_verify') && !ua_csrf_verify()){
    $flash = 'انتهت صلاحية الطلب. أعد تحميل الصفحة وحاول مجدداً.';
  } elseif(!$is_super){
    $flash = 'غير مصرح: حذف السجل متاح للمدير الأساسي فقط.';
  } else {
    $df = trim((string)($_POST['date_from'] ?? ''));
    $dt = trim((string)($_POST['date_to'] ?? ''));
    $validFrom = DateTimeImmutable::createFromFormat('!Y-m-d', $df);
    $validTo = DateTimeImmutable::createFromFormat('!Y-m-d', $dt);
    if(!$validFrom || !$validTo || $validFrom->format('Y-m-d') !== $df || $validTo->format('Y-m-d') !== $dt){
      $flash = 'يرجى تحديد من تاريخ إلى تاريخ.';
    } elseif ($validFrom > $validTo) {
      $flash = 'يجب أن يكون تاريخ البداية قبل تاريخ النهاية.';
    } else {
      $fromValue = $df . ' 00:00:00';
      $toValue = $dt . ' 23:59:59';
      $delete = $conn->prepare("DELETE FROM message_logs WHERE created_at BETWEEN ? AND ?");
      if ($delete) {
        $delete->bind_param('ss', $fromValue, $toValue);
        if ($delete->execute()) {
          $flash = 'تم حذف ' . (int)$delete->affected_rows . ' سجل ضمن الفترة المحددة.';
          $flashType = 'success';
        } else {
          $flash = 'تعذر حذف السجل ضمن الفترة المحددة.';
        }
        $delete->close();
      } else {
        $flash = 'تعذر تجهيز عملية حذف السجل.';
      }
    }
  }
  $_SESSION['message_log_flash'] = ['message'=>$flash,'type'=>$flashType];
  header('Location: message_log.php');
  exit;
}

$q = trim((string)($_GET['q'] ?? ''));
$channel = strtolower(trim((string)($_GET['channel'] ?? '')));
$status = strtoupper(trim((string)($_GET['status'] ?? '')));
$from = trim((string)($_GET['from'] ?? ''));
$to = trim((string)($_GET['to'] ?? ''));
$allowedChannels = ['sms','whatsapp','both'];
$allowedStatuses = ['QUEUED','RETRY','SENDING','SENT','FAILED'];
$statusLabels = [
  'QUEUED'=>'في الطابور',
  'RETRY'=>'إعادة محاولة',
  'SENDING'=>'قيد الإرسال',
  'SENT'=>'مرسلة',
  'FAILED'=>'فشل الإرسال',
];
$channelLabels = ['sms'=>'SMS','whatsapp'=>'واتساب','both'=>'واتساب + SMS'];
if ($channel !== '' && !in_array($channel, $allowedChannels, true)) $channel = '';
if ($status !== '' && !in_array($status, $allowedStatuses, true)) $status = '';
if ($from !== '' && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $from)) $from = '';
if ($to !== '' && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $to)) $to = '';

$where = [];
if($q!==''){
  $qq = $conn->real_escape_string($q);
  $where[] = "(phone LIKE '%$qq%' OR response LIKE '%$qq%' OR template_key LIKE '%$qq%')";
}
if($channel!==''){
  $ch = $conn->real_escape_string($channel);
  $where[] = "LOWER(channel)='$ch'";
}
if($status!==''){
  $st = $conn->real_escape_string($status);
  $where[] = "UPPER(status)='$st'";
}
if($from!==''){
  $f = $conn->real_escape_string($from.' 00:00:00');
  $where[] = "created_at >= '$f'";
}
if($to!==''){
  $t = $conn->real_escape_string($to.' 23:59:59');
  $where[] = "created_at <= '$t'";
}

$sql = "SELECT id, template_key, subscriber_id, phone, channel, status, response, created_at
        FROM message_logs";
if($where) $sql .= " WHERE ".implode(" AND ", $where);
$sql .= " ORDER BY id DESC LIMIT 500";

$rows = $conn->query($sql);
$logCount = $rows ? $rows->num_rows : 0;

include __DIR__ . '/header.php';
include __DIR__ . '/sidebar.php';
$active_tab = 'log';
include __DIR__ . '/messages_tabs.php';
?>
<div class="content-wrapper ua-msg-page ua-extracted-page msg-log-page">
  <section class="content">
    <div class="container-fluid">
      <header class="msg-page-hero">
        <div class="msg-page-hero__title">
          <i class="msg-page-hero__icon fa fa-list-alt"></i>
          <div>
            <small>DELIVERY HISTORY</small>
            <h1>سجل إرسال الرسائل</h1>
            <p>تتبّع القناة والنتيجة واستجابة مزوّد الإرسال لكل رسالة.</p>
          </div>
        </div>
        <div class="msg-page-hero__meta"><i></i><?= (int)$logCount ?> نتيجة</div>
      </header>

      <?php if (is_array($flashData) && !empty($flashData['message'])): ?>
        <div class="msg-feedback <?= ($flashData['type'] ?? '') === 'success' ? '' : 'is-error' ?>">
          <i class="fa <?= ($flashData['type'] ?? '') === 'success' ? 'fa-check-circle' : 'fa-exclamation-triangle' ?>"></i>
          <span><?= h((string)$flashData['message']) ?></span>
        </div>
      <?php endif; ?>

      <section class="msg-panel">
        <div class="msg-panel-title">
          <i class="fa fa-filter"></i>
          <div><small>FILTERS</small><h2>البحث والتصفية</h2></div>
        </div>
        <form method="get" class="msg-log-filters">
          <label class="msg-field">
            <span>بحث</span>
            <input name="q" value="<?= h($q) ?>" placeholder="الهاتف أو القالب أو استجابة المزوّد">
          </label>
          <label class="msg-field">
            <span>القناة</span>
            <select name="channel">
              <option value="">كل القنوات</option>
              <option value="sms" <?= $channel==='sms'?'selected':'' ?>>SMS</option>
              <option value="whatsapp" <?= $channel==='whatsapp'?'selected':'' ?>>واتساب</option>
            </select>
          </label>
          <label class="msg-field">
            <span>الحالة</span>
            <select name="status">
              <option value="">كل الحالات</option>
              <?php foreach ($allowedStatuses as $allowedStatus): ?>
                <option value="<?= h($allowedStatus) ?>" <?= $status===$allowedStatus?'selected':'' ?>><?= h($statusLabels[$allowedStatus] ?? $allowedStatus) ?></option>
              <?php endforeach; ?>
            </select>
          </label>
          <label class="msg-field">
            <span>من تاريخ</span>
            <input type="date" name="from" value="<?= h($from) ?>">
          </label>
          <label class="msg-field">
            <span>إلى تاريخ</span>
            <input type="date" name="to" value="<?= h($to) ?>">
          </label>
          <button class="msg-primary-action" type="submit"><i class="fa fa-search"></i> بحث</button>
        </form>

        <?php if ($is_super): ?>
          <details class="msg-log-danger">
            <summary><i class="fa fa-shield"></i> إدارة السجل للمدير الأساسي</summary>
            <form method="post" class="msg-log-delete-form" onsubmit="return confirm('تأكيد حذف السجل ضمن الفترة؟');">
              <?php if (function_exists('ua_csrf_field')) ua_csrf_field(); ?>
              <input type="hidden" name="action" value="delete_range">
              <label class="msg-field"><span>حذف من تاريخ</span><input type="date" name="date_from" required></label>
              <label class="msg-field"><span>إلى تاريخ</span><input type="date" name="date_to" required></label>
              <button type="submit"><i class="fa fa-trash"></i> حذف السجل ضمن الفترة</button>
            </form>
          </details>
        <?php endif; ?>
      </section>

      <div class="msg-table-shell">
        <table class="table table-bordered table-striped">
          <thead>
            <tr>
              <th>#</th>
              <th>التاريخ</th>
              <th>القناة</th>
              <th>الحالة</th>
              <th>الهاتف</th>
              <th>القالب</th>
              <th>استجابة المزوّد</th>
            </tr>
          </thead>
          <tbody>
            <?php if ($rows && $rows->num_rows): while ($r=$rows->fetch_assoc()): ?>
              <?php $st = strtoupper((string)($r['status'] ?? '')); ?>
              <?php $rowChannel = strtolower((string)($r['channel'] ?? '')); ?>
              <tr>
                <td><?= (int)$r['id'] ?></td>
                <td dir="ltr"><?= h($r['created_at'] ?? '') ?></td>
                <td><?= h($channelLabels[$rowChannel] ?? $rowChannel) ?></td>
                <td><span class="<?= $st==='FAILED'?'text-danger':($st==='SENT'?'text-success':'') ?>"><b><?= h($statusLabels[$st] ?? $st) ?></b></span></td>
                <td dir="ltr"><?= h($r['phone'] ?? '') ?></td>
                <td dir="ltr"><?= h($r['template_key'] ?? '') ?></td>
                <td class="msg-response" title="<?= h($r['response'] ?? '') ?>"><?= h($r['response'] ?? '') ?></td>
              </tr>
            <?php endwhile; else: ?>
              <tr><td colspan="7" class="text-center">لا توجد سجلات مطابقة.</td></tr>
            <?php endif; ?>
          </tbody>
        </table>
      </div>
    </div>
  </section>
</div>

<?php include __DIR__ . '/footer.php'; ?>
