<?php

require_once __DIR__ . '/agent_portal_lib.php';
require_once __DIR__ . '/agent_edit_request_lib.php';
require_once __DIR__ . '/subscriber_contracts_lib.php';

$conn = ensure_db(true);
$ctx = agent_portal_boot($conn);
$agent = $ctx['agent'] ?? null;
$agentId = (int)($ctx['agent_id'] ?? 0);

function acd_fail(string $message, int $status = 403): void {
  http_response_code($status);
  header('Content-Type: text/html; charset=utf-8');
  echo '<!doctype html><html lang="ar" dir="rtl"><meta charset="utf-8"><title>طباعة العقد</title><body style="font-family:Tahoma;background:#07111f;color:#fff;padding:30px"><div style="max-width:620px;margin:auto;background:#0d1d32;border:1px solid #7c6218;border-radius:16px;padding:24px"><h2>تعذر طباعة العقد</h2><p>' . htmlspecialchars($message, ENT_QUOTES, 'UTF-8') . '</p><button onclick="history.back()" style="padding:10px 18px">رجوع</button></div></body></html>';
  exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') acd_fail('طريقة الطلب غير صالحة.', 405);
if (!$agent || empty($ctx['logged']) || $agentId <= 0) acd_fail('يجب تسجيل دخول المعتمد.');
if (!ua_csrf_verify()) acd_fail('انتهت صلاحية الطلب. أعد تحميل الصفحة.', 419);

$subscriberId = max(0, (int)($_POST['subscriber_id'] ?? 0));
$mode = strtolower(trim((string)($_POST['contract_mode'] ?? 'full')));
$delivery = strtolower(trim((string)($_POST['delivery'] ?? 'download')));
$editToken = strtolower(trim((string)($_POST['agent_edit_token'] ?? '')));
if (!in_array($mode, ['full','changed'], true)) acd_fail('اختر طريقة طباعة صحيحة.', 422);
if (!in_array($delivery, ['download','print'], true)) $delivery = 'download';

$stmt = $conn->prepare("SELECT id,created_by_type,created_by_id FROM subscribers WHERE id=? AND COALESCE(is_deleted,0)=0 LIMIT 1");
$stmt->bind_param('i', $subscriberId);
$stmt->execute();
$subscriber = $stmt->get_result()->fetch_assoc();
$stmt->close();
if (!$subscriber) acd_fail('المشترك غير موجود.', 404);

$ownsSubscriber = strtolower(trim((string)($subscriber['created_by_type'] ?? ''))) === 'agent'
  && (int)($subscriber['created_by_id'] ?? 0) === $agentId;
$hasEditGrant = $editToken !== '' && ua_agent_edit_request_is_granted($conn, $editToken, $agentId, $subscriberId);
if (!$ownsSubscriber && !$hasEditGrant) acd_fail('لا توجد موافقة صالحة لطباعة عقد هذا المشترك.');

$actorName = trim((string)($agent['full_name'] ?? $agent['name'] ?? ''));
$generated = sc_generate_subscriber_contract_record($conn, $subscriberId, $mode, 'AGENT: ' . $actorName);
if (empty($generated['ok'])) acd_fail((string)($generated['error'] ?? 'تعذر توليد العقد.'), 422);

$path = (string)$generated['absolute_path'];
if (!is_file($path)) acd_fail('تم إنشاء السجل لكن ملف العقد غير موجود.', 500);
sc_event(
  $conn,
  (int)$generated['contract_id'],
  $subscriberId,
  $delivery === 'print' ? 'AGENT_PRINT_PREPARE' : 'AGENT_DOWNLOAD',
  $mode === 'changed' ? 'تجهيز الصفحات المعبأة فقط' : 'تجهيز العقد الكامل'
);

$filename = trim((string)$generated['filename']) ?: ('contract-' . $subscriberId . '.docx');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Length: ' . filesize($path));
header("Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode($filename));
header('X-UA-Contract-Id: ' . (int)$generated['contract_id']);
header('X-Content-Type-Options: nosniff');
readfile($path);
exit;
