<?php
ob_start();
require_once dirname(__DIR__) . '/auth.php';
require_once dirname(__DIR__) . '/helpers.php';
require_once dirname(__DIR__) . '/install_link_lib.php';
if (ob_get_length()) ob_clean();

header('Content-Type: application/json; charset=utf-8');
require_login();
if (function_exists('require_perm')) require_perm('can_manage_settings');

function ua_link_prompt_reply(array $payload, int $status = 200): void {
  http_response_code($status);
  echo json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  exit;
}

if (!function_exists('ua_is_server_install') || !ua_is_server_install()) {
  ua_link_prompt_reply(['ok' => false, 'message' => 'طلبات الموافقة متاحة في النسخة الرئيسية فقط.'], 403);
}

$conn = ensure_db(true);
if (!($conn instanceof mysqli)) {
  ua_link_prompt_reply(['ok' => false, 'message' => 'قاعدة البيانات غير جاهزة.'], 503);
}
ua_link_ensure_schema($conn);

if (($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
  if (!function_exists('ua_csrf_verify') || !ua_csrf_verify()) {
    ua_link_prompt_reply(['ok' => false, 'message' => 'انتهت صلاحية الطلب. أعد تحميل الصفحة.'], 419);
  }

  $requestId = (int)($_POST['request_id'] ?? 0);
  $decision = strtolower(trim((string)($_POST['decision'] ?? '')));
  if ($requestId <= 0 || !in_array($decision, ['approve', 'reject'], true)) {
    ua_link_prompt_reply(['ok' => false, 'message' => 'قرار الموافقة غير صالح.'], 422);
  }

  $status = $decision === 'approve' ? 'approved' : 'rejected';
  $adminId = (int)($_SESSION['admin_id'] ?? ($_SESSION['admin_user_id'] ?? 0));
  if ($status === 'approved') {
    $stmt = $conn->prepare("UPDATE ua_link_requests SET status='approved', approved_by=?, approved_at=NOW(), updated_at=NOW() WHERE id=? AND status='pending'");
    if ($stmt) $stmt->bind_param('ii', $adminId, $requestId);
  } else {
    $stmt = $conn->prepare("UPDATE ua_link_requests SET status='rejected', approved_by=NULL, approved_at=NULL, updated_at=NOW() WHERE id=? AND status='pending'");
    if ($stmt) $stmt->bind_param('i', $requestId);
  }
  if (!$stmt || !$stmt->execute()) {
    if ($stmt) $stmt->close();
    ua_link_prompt_reply(['ok' => false, 'message' => 'تعذر حفظ قرار الموافقة.'], 500);
  }
  $changed = $stmt->affected_rows > 0;
  $stmt->close();
  if (!$changed) {
    ua_link_prompt_reply(['ok' => false, 'message' => 'تمت معالجة هذا الطلب مسبقاً.'], 409);
  }
  ua_link_prompt_reply([
    'ok' => true,
    'status' => $status,
    'message' => $status === 'approved' ? 'تمت الموافقة على ربط النسخة.' : 'تم رفض طلب الربط.',
  ]);
}

$request = null;
$sql = "SELECT r.id,r.instance_name,r.install_type,r.connection_mode,r.server_url,r.reported_url,r.remote_addr,r.created_at,r.updated_at,e.label endpoint_label
  FROM ua_link_requests r
  LEFT JOIN ua_link_endpoints e ON e.id=r.endpoint_id
  WHERE r.status='pending'
  ORDER BY r.created_at ASC,r.id ASC LIMIT 1";
$result = @$conn->query($sql);
if ($result && $result->num_rows) {
  $request = $result->fetch_assoc();
  $request['id'] = (int)$request['id'];
  $request['install_type_label'] = ua_link_install_type_label((string)$request['install_type']);
  $request['connection_mode_label'] = ($request['connection_mode'] ?? 'local') === 'internet' ? 'عبر الإنترنت' : 'شبكة محلية';
}

ua_link_prompt_reply([
  'ok' => true,
  'request' => $request,
  'csrf' => function_exists('ua_csrf_token') ? ua_csrf_token() : ($_SESSION['csrf_token'] ?? ''),
]);

