<?php
@ini_set('display_errors','0');
@ini_set('log_errors','1');
@set_time_limit(120);
error_reporting(E_ALL);
require_once __DIR__ . '/api_common.php';
require_once __DIR__ . '/../auth.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');
if (function_exists('ua_csrf_verify') && !ua_csrf_verify()) {
  out(['ok'=>false,'error'=>'انتهت صلاحية الطلب. أعد تحميل الصفحة وحاول مجدداً.'], 419);
}
ensure_message_queue_tables($conn);

$cid = (int)($_POST['campaign_id'] ?? 0);
if ($cid<=0) out(['ok'=>false,'error'=>'معرّف الحملة مطلوب.'],400);

$crs = $conn->query("SELECT * FROM message_campaigns WHERE id=$cid LIMIT 1");
if(!$crs || !$crs->num_rows) out(['ok'=>false,'error'=>'الحملة غير موجودة.'],404);
$camp = $crs->fetch_assoc();
if (strtoupper(trim((string)($camp['status'] ?? ''))) === 'PAUSED') {
  out(['ok'=>false,'error'=>'الحملة موقوفة. استأنفها قبل إضافة رسائل جديدة إلى الطابور.'],409);
}

$templateKey = (string)($camp['template_key'] ?? '');
$channel = strtolower(trim((string)($camp['channel'] ?? 'whatsapp')));
$filters = ml_safe_json_decode($camp['filters_json'] ?? '');
$audience = strtolower(trim((string)($filters['audience'] ?? 'all')));
if (!in_array($channel, ['sms','whatsapp','both'], true)) {
  out(['ok'=>false,'error'=>'قناة الحملة غير صالحة.'], 422);
}
if (!in_array($audience, ['all','active','stopped','has_phone'], true)) {
  out(['ok'=>false,'error'=>'جمهور الحملة غير صالح.'], 422);
}
if (!messages_load_template($conn, $templateKey)) {
  out(['ok'=>false,'error'=>'قالب الحملة غير موجود أو غير مفعّل.'], 422);
}
if (!ml_col_exists($conn, 'subscribers', 'phone')) {
  out(['ok'=>false,'error'=>'بيانات المشتركين لا تحتوي حقل رقم الهاتف.'], 500);
}

$uid = (int)($_SESSION['admin_user_id'] ?? $_SESSION['admin_id'] ?? 0);
$queueResult = messages_campaign_enqueue_targets($conn, $cid, $templateKey, $channel, $filters, $uid);
if (empty($queueResult['ok'])) out($queueResult, 500);
$queued = (int)$queueResult['queued'];
$skipped = (int)$queueResult['skipped'];
$invalid = (int)$queueResult['invalid'];
$totalCount = (int)$queueResult['total_targets'];
$remainingTargets = (int)$queueResult['remaining_targets'];

$queuedCount = 0;
$queuedRs = $conn->query("SELECT COUNT(DISTINCT subscriber_id) AS c FROM message_outbox WHERE campaign_id={$cid}");
if ($queuedRs && $queuedRs->num_rows) $queuedCount = (int)($queuedRs->fetch_assoc()['c'] ?? 0);
$status = $queuedCount > 0 ? 'QUEUED' : (string)($camp['status'] ?? 'DRAFT');
$update = $conn->prepare("UPDATE message_campaigns
  SET total_targets=?,queued_count=?,status=? WHERE id=? LIMIT 1");
if ($update) {
  $update->bind_param('iisi', $totalCount, $queuedCount, $status, $cid);
  $update->execute();
  $update->close();
}

out([
  'ok'=>true,
  'campaign_id'=>$cid,
  'queued'=>$queued,
  'queued_total'=>$queuedCount,
  'total_targets'=>$totalCount,
  'remaining_targets'=>$remainingTargets,
  'already_queued'=>$skipped,
  'invalid_targets'=>$invalid,
]);
