<?php
@ini_set('display_errors','0');
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
if (session_status() === PHP_SESSION_NONE) session_start();
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../auth.php';
require_once __DIR__ . '/../db_bootstrap.php';
require_once __DIR__ . '/../super_admin_guard.php';
require_once __DIR__ . '/../subscribers_queue_lib.php';

function ua_single_out(array $a, int $code=200): void { http_response_code($code); echo json_encode($a, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); exit; }
require_login('index.php?login=1');
if (function_exists('require_perm')) @require_perm('can_manage_subscribers');
$conn = ensure_db(true);

$go = super_admin_sanitize_go((string)($_POST['go'] ?? ''));
if ($go === '' || !super_admin_ok($go)) {
  ua_single_out(['ok'=>false,'message'=>'انتهت جلسة الحماية أو لم يتم التحقق من كلمة مرور السوبر أدمن.'], 403);
}

try {
  $u = parse_url($go);
  $file = strtolower(basename((string)($u['path'] ?? '')));
  parse_str((string)($u['query'] ?? ''), $q);
  $id = (int)($q['id'] ?? 0);
  $action = '';
  if ($file === 'subscribers_ppp_toggle.php') {
    $a = strtolower((string)($q['a'] ?? ''));
    if ($a === 'cut') $action = 'cut';
    if ($a === 'restore') $action = 'restore';
  } elseif ($file === 'subscribers_cancel.php') {
    $action = 'cancel';
  }
  if ($id <= 0 || !in_array($action, ['cut','restore','cancel'], true)) {
    ua_single_out(['ok'=>false,'message'=>'هذا الزر غير مدعوم للتنفيذ المباشر.'], 400);
  }
  sq_ensure_schema($conn);
  $jobId = sq_enqueue_job($conn, $action, [$id], sq_request_user());
  // شغّل العامل فوراً لمستخدم واحد حتى لا يشعر المستخدم أن الزر توقف.
  $run = sq_run_worker($conn, 1, 25);
  $job = sq_get_job($conn, $jobId);
  $status = (string)($job['status'] ?? 'queued');
  $ok = in_array($status, ['done','partial','running','queued'], true);
  ua_single_out([
    'ok' => $ok,
    'job_id' => $jobId,
    'status' => $status,
    'message' => (string)($job['message'] ?? 'تم إنشاء مهمة التنفيذ.'),
    'job' => $job,
    'worker' => $run,
  ], $ok ? 200 : 500);
} catch (Throwable $e) {
  if (function_exists('sq_log')) sq_log('single action failed: '.$e->getMessage());
  ua_single_out(['ok'=>false,'message'=>$e->getMessage()], 500);
}
