<?php
// Agent portal home: profile, connection badge, balance, quick actions, and invoice collection.

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

$conn = ensure_db(true);
mysqli_report(MYSQLI_REPORT_OFF);
finance_ensure_payments_table($conn);
$ctx = agent_portal_boot($conn);
$agentId = (int)$ctx['agent_id'];
$agent = $ctx['agent'];
$logged = !empty($ctx['logged']);
$sessionKey = (string)$ctx['session_key'];
$msg = '';
$err = '';
$warning = '';
$hasAdminSession = !empty($_SESSION['admin_id'])
  || !empty($_SESSION['admin_user_id'])
  || !empty($_SESSION['admin_user']);
$agentEntryUrl = function_exists('ua_is_agent_install') && ua_is_agent_install()
  ? 'agent_portal.php'
  : 'agent_portal.php?select=1';
$workspaceViews = ['home', 'add', 'status', 'edit', 'balance', 'profile', 'printers', 'billing'];
$view = strtolower(trim((string)($_GET['view'] ?? $_POST['view'] ?? 'home')));
if (!in_array($view, $workspaceViews, true)) $view = 'home';

function ap_workspace_url(int $agentId, string $view, array $params = []): string {
  return 'agent_portal.php?' . http_build_query(['agent'=>$agentId, 'view'=>$view] + $params);
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !ua_csrf_verify()) {
  $err = 'انتهت صلاحية الطلب. أعد تحميل الصفحة وحاول مجدداً.';
}

if (!$err && $agent && isset($_POST['login'])) {
  $password = (string)($_POST['password'] ?? '');
  if (ua_agent_password_ok($agent, $password, true)) {
    $_SESSION[$sessionKey] = true;
    $_SESSION['agent_portal_flash_' . $agentId] = 'تم تسجيل الدخول بنجاح.';
    header('Location: agent_portal.php?agent=' . $agentId);
    exit;
  }
  $err = 'كلمة المرور غير صحيحة.';
}

if (!$err && $agent && isset($_POST['logout'])) {
  unset($_SESSION[$sessionKey]);
  header('Location: agent_portal.php?agent=' . $agentId);
  exit;
}

function ap_fetch_subscriber(mysqli $conn, int $subscriberId): ?array {
  if ($subscriberId <= 0 || !table_exists($conn, 'subscribers')) return null;
  $cols = ['id'];
  foreach (['full_name','first_name','father_name','last_name','phone','status','package_name','speed_name','ppp_username','document_type','document_number','national_id','created_by_type','created_by_id'] as $col) {
    $cols[] = agent_portal_col($conn, 'subscribers', $col);
  }
  $stmt = $conn->prepare('SELECT ' . implode(',', $cols) . ' FROM subscribers WHERE id=? LIMIT 1');
  if (!$stmt) return null;
  $stmt->bind_param('i', $subscriberId);
  $stmt->execute();
  $res = $stmt->get_result();
  $row = ($res && $res->num_rows) ? $res->fetch_assoc() : null;
  $stmt->close();
  return $row ?: null;
}

function ap_fetch_invoices(mysqli $conn, int $subscriberId): array {
  if ($subscriberId <= 0 || !table_exists($conn, 'invoices')) return [];
  $stmt = $conn->prepare("
    SELECT *
    FROM invoices
    WHERE subscriber_id=?
    ORDER BY
      CASE WHEN COALESCE(payment_status,'')='paid' OR status='مدفوع' THEN 1 ELSE 0 END ASC,
      id DESC
    LIMIT 12
  ");
  if (!$stmt) return [];
  $stmt->bind_param('i', $subscriberId);
  $stmt->execute();
  $res = $stmt->get_result();
  $rows = [];
  if ($res) while ($r = $res->fetch_assoc()) $rows[] = $r;
  $stmt->close();
  return $rows;
}

if (!$err && $agent && $logged && isset($_POST['pay_invoice'])) {
  $invoiceId = (int)($_POST['invoice_id'] ?? 0);
  $confirmPassword = (string)($_POST['confirm_password'] ?? '');
  $returnQ = trim((string)($_POST['q'] ?? ''));
  $invoice = $invoiceId > 0 ? finance_fetch_invoice_with_subscriber($conn, $invoiceId) : null;
  $returnSubId = (int)($invoice['subscriber_id'] ?? ($_POST['subscriber_id'] ?? 0));

  if (!$invoice) {
    $err = 'الفاتورة غير موجودة.';
  } elseif (ua_agent_invoice_is_paid($invoice)) {
    $err = 'هذه الفاتورة مدفوعة مسبقاً.';
  } elseif (!finance_invoice_payment_due($invoice)) {
    $err = 'يتفعل تسديد هذه الفاتورة في تاريخ الاستحقاق.';
  } elseif (!ua_agent_password_ok($agent, $confirmPassword, true)) {
    $err = 'تأكيد كلمة مرور المعتمد غير صحيح.';
  } else {
    $amount = (float)($invoice['amount'] ?? 0);
    $reference = 'AGENT_INV#' . $agentId . '#' . $invoiceId . '#' . date('YmdHis');
    $pay = finance_pay_invoice($conn, $invoiceId, [
      'amount'=>$amount,
      'method'=>'نقدي',
      'note'=>'تسديد عبر واجهة المعتمد: ' . (string)($agent['name'] ?? ''),
      'created_by'=>'AGENT: ' . (string)($agent['name'] ?? ''),
      'reference'=>$reference,
      'idempotency_key'=>'AGENT_INVOICE_PAYMENT:' . $agentId . ':' . $invoiceId,
      'agent_id'=>$agentId,
      'source_type'=>'agent',
      'source_ref'=>(string)$agentId,
      'source_name'=>(string)($agent['name'] ?? $agent['full_name'] ?? ('معتمد #' . $agentId)),
      'source_instance_id'=>(string)($agent['linked_instance_id'] ?? ''),
      'channel'=>'desktop',
    ]);
    if (empty($pay['ok'])) {
      $err = (string)($pay['error'] ?? 'تعذر تسديد الفاتورة.');
    } else {
      if (!empty($pay['warning'])) $_SESSION['agent_portal_warning_' . $agentId] = (string)$pay['warning'];
      $_SESSION['agent_portal_flash_' . $agentId] = 'تم التسديد وترحيل العملية إلى السجلات والرصيد المستحق.';
      $url = ap_workspace_url($agentId, 'billing', ['subscriber_id'=>$returnSubId]);
      if ($returnQ !== '') $url .= '&q=' . urlencode($returnQ);
      if (!empty($pay['auto_print'])) $url .= '&auto_print_invoice=' . $invoiceId;
      header('Location: ' . $url);
      exit;
    }
  }
}

if (!$err && $agent && $logged && isset($_POST['request_edit_access'])) {
  $requestNote = trim((string)($_POST['request_note'] ?? ''));
  $created = ua_agent_edit_access_request_create($conn, $agentId, $requestNote);
  if (empty($created['ok'])) {
    $err = (string)($created['error'] ?? 'تعذر إرسال طلب صلاحية التعديل.');
  } else {
    $token = (string)($created['token'] ?? '');
    $_SESSION['agent_portal_flash_' . $agentId] = !empty($created['granted'])
      ? 'صلاحية التعديل ما زالت فعالة.'
      : (!empty($created['duplicate'])
        ? 'يوجد طلب صلاحية تعديل سابق وما زال بانتظار موافقة الإدارة.'
        : 'تم إرسال طلب صلاحية التعديل إلى الإدارة.');
    header('Location: ' . ap_workspace_url($agentId, 'edit', ['edit_request_token'=>$token]));
    exit;
  }
}

if (!$err && $agent && $logged && isset($_POST['request_subscriber_edit'])) {
  $subscriberId = (int)($_POST['subscriber_id'] ?? 0);
  $requestNote = trim((string)($_POST['request_note'] ?? ''));
  $created = ua_agent_edit_request_create($conn, $agentId, $subscriberId, $requestNote);
  if (empty($created['ok'])) {
    $err = (string)($created['error'] ?? 'تعذر إرسال طلب التعديل.');
  } else {
    $token = (string)($created['token'] ?? '');
    $_SESSION['agent_portal_flash_' . $agentId] = !empty($created['duplicate'])
      ? 'يوجد طلب تعديل سابق لهذا المشترك وما زال بانتظار الموافقة.'
      : 'تم إرسال طلب تعديل المشترك إلى الإدارة للموافقة.';
    $returnView = (string)($_POST['view'] ?? 'edit');
    if (!in_array($returnView, ['edit', 'billing'], true)) $returnView = 'edit';
    header('Location: ' . ap_workspace_url($agentId, $returnView, [
      'subscriber_id'=>$subscriberId,
      'edit_request_token'=>$token,
    ]));
    exit;
  }
}

if ($agent) {
  if ((int)($agent['is_active'] ?? 1) !== 1) $err = 'هذا المعتمد غير مفعل.';
  if ((int)($agent['portal_enabled'] ?? 1) !== 1) $err = 'واجهة المعتمد موقوفة لهذا الحساب.';
  $fresh = ua_agent_get($conn, $agentId);
  if ($fresh) { $agent = $fresh; $ctx['agent'] = $fresh; }
}

if ($agent && !empty($_SESSION['agent_portal_flash_' . $agentId])) {
  $msg = (string)$_SESSION['agent_portal_flash_' . $agentId];
  unset($_SESSION['agent_portal_flash_' . $agentId]);
}
if ($agent && !empty($_SESSION['agent_portal_warning_' . $agentId])) {
  $warning = (string)$_SESSION['agent_portal_warning_' . $agentId];
  unset($_SESSION['agent_portal_warning_' . $agentId]);
}

$workspaceHasSubscriberSearch = in_array($view, ['billing', 'edit'], true);
$q = $workspaceHasSubscriberSearch ? trim((string)($_GET['q'] ?? '')) : '';
$selectedSubscriberId = $workspaceHasSubscriberSearch ? (int)($_GET['subscriber_id'] ?? 0) : 0;
$editRequestToken = strtolower(trim((string)($_GET['edit_request_token'] ?? '')));
$editAccessRequest = null;
$editAccessGranted = false;
if ($agent && $logged && $view === 'edit') {
  if ($editRequestToken !== '') {
    $candidate = ua_agent_edit_request_find($conn, $editRequestToken, $agentId, 0);
    if ($candidate && (string)($candidate['request_scope'] ?? '') === 'PORTAL_EDIT') {
      $editAccessRequest = $candidate;
    }
  }
  if (!$editAccessRequest) {
    $editAccessRequest = ua_agent_edit_access_request_latest($conn, $agentId);
    if ($editAccessRequest) $editRequestToken = (string)$editAccessRequest['request_token'];
  }
  $editAccessGranted = $editAccessRequest
    && (string)($editAccessRequest['status'] ?? '') === 'APPROVED'
    && !empty($editAccessRequest['expires_at'])
    && strtotime((string)$editAccessRequest['expires_at']) >= time();
  if (!$editAccessGranted) {
    $q = '';
    $selectedSubscriberId = 0;
  }
}
$results = ($agent && $logged && $q !== '') ? agent_portal_search_subscribers($conn, $q) : [];
$selectedSubscriber = ($agent && $logged && $selectedSubscriberId > 0) ? ap_fetch_subscriber($conn, $selectedSubscriberId) : null;
$invoices = $selectedSubscriber ? ap_fetch_invoices($conn, (int)$selectedSubscriber['id']) : [];
$appInfo = app_version_info();

$portalEntryCss = !$logged ? ['assets/css/exanet_login.css', 'assets/css/agent_portal_entry.css'] : [];
$portalEntryBodyClass = !$logged
  ? 'ua-guest ua-shell-plain ua-p-index ua-agent-public-entry ua-theme-armoury_dark ua-lang-ar ua-density-comfortable ua-design-v2 ua-design-forced-v2 ua-spacing-normal'
  : '';
agent_portal_render_head('واجهة المعتمد', $portalEntryCss, $portalEntryBodyClass);
agent_portal_render_shell_start($conn, $ctx, 'home');
?>
<?php if($logged && ($msg || $warning || $err)): ?>
  <div class="ua-feedback-stack ap-toast-stack" role="status" aria-live="polite">
    <?php if($msg): ?><div class="ap-toast ap-toast-success"><?= h($msg) ?></div><?php endif; ?>
    <?php if($warning): ?><div class="ap-toast ap-toast-warning"><?= h($warning) ?></div><?php endif; ?>
    <?php if($err): ?><div class="ap-toast ap-toast-danger"><?= h($err) ?></div><?php endif; ?>
  </div>
<?php endif; ?>

<?php if(!$agent): ?>
  <?php agent_portal_render_public_entry_start('اختيار المعتمد', 'اختر حساب المعتمد للمتابعة إلى تسجيل الدخول.', 'اختيار حساب المعتمد'); ?>
    <?php $agents = agent_portal_fetch_agents($conn); ?>
    <?php if(!$agents): ?>
      <div class="exa-login-alert" role="alert"><i class="fa fa-info-circle"></i><span>لا يوجد معتمدون مفعّلون حالياً.</span></div>
    <?php else: ?>
      <div class="ap-agent-list ap-entry-agent-list">
        <?php foreach($agents as $a): ?>
          <a class="ap-entry-agent" href="agent_portal.php?agent=<?= (int)$a['id'] ?>">
            <span class="ap-entry-agent__icon"><i class="fa fa-user"></i></span>
            <span class="ap-entry-agent__copy">
              <strong><?= h($a['name'] ?? '') ?></strong>
              <small><?= h($a['username'] ?? '') ?></small>
            </span>
            <i class="fa fa-arrow-left ap-entry-agent__arrow" aria-hidden="true"></i>
          </a>
        <?php endforeach; ?>
      </div>
    <?php endif; ?>
    <div class="exa-login-actions ap-entry-actions">
      <?php if($hasAdminSession): ?>
        <a class="exa-btn exa-btn-secondary" href="dashboard.php">العودة إلى لوحة الإدارة</a>
      <?php else: ?>
        <button class="exa-btn exa-btn-secondary" type="button" onclick="window.close()">إغلاق</button>
      <?php endif; ?>
    </div>
  <?php agent_portal_render_public_entry_end(); ?>
<?php elseif(!$logged): ?>
  <?php
    $agentLoginName = trim((string)($agent['username'] ?? '')) !== '' ? (string)$agent['username'] : (string)($agent['name'] ?? '');
  ?>
  <?php agent_portal_render_public_entry_start('تسجيل دخول المعتمد', 'أدخل بيانات حساب المعتمد للوصول إلى واجهته.', 'تسجيل دخول المعتمد'); ?>
    <?php if($err): ?>
      <div class="exa-login-alert" role="alert"><i class="fa fa-exclamation-circle"></i><span><?= h($err) ?></span></div>
    <?php endif; ?>
    <form method="post" class="exa-login-form" autocomplete="on">
      <?php ua_csrf_field(); ?>
      <input type="hidden" name="agent" value="<?= (int)$agentId ?>">

      <div class="exa-field-group">
        <label for="agentUser" class="exa-field-label">اسم المستخدم</label>
        <div class="exa-field-shell">
          <input id="agentUser" class="exa-field-input" type="text" value="<?= h($agentLoginName) ?>" autocomplete="username" readonly>
          <span class="exa-field-icon exa-field-icon-end" aria-hidden="true"><i class="fa fa-user-o"></i></span>
        </div>
      </div>

      <div class="exa-field-group">
        <label for="agentPass" class="exa-field-label">كلمة المرور</label>
        <div class="exa-field-shell">
          <button type="button" class="exa-field-toggle" id="agentTogglePass" aria-label="إظهار أو إخفاء كلمة المرور"><i class="fa fa-eye"></i></button>
          <input id="agentPass" class="exa-field-input exa-field-input-pass" name="password" type="password" placeholder="أدخل كلمة المرور" autocomplete="current-password" autofocus required>
          <span class="exa-field-icon exa-field-icon-end" aria-hidden="true"><i class="fa fa-lock"></i></span>
        </div>
      </div>

      <div class="exa-login-actions">
        <button class="exa-btn exa-btn-primary" name="login" type="submit">دخول</button>
        <a class="exa-btn exa-btn-secondary" href="<?= h($agentEntryUrl) ?>">رجوع</a>
      </div>
    </form>
  <?php agent_portal_render_public_entry_end(); ?>
  <script>
  (function(){
    var btn = document.getElementById('agentTogglePass');
    var input = document.getElementById('agentPass');
    if (!btn || !input) return;
    btn.addEventListener('click', function(){
      var isPass = input.getAttribute('type') === 'password';
      input.setAttribute('type', isPass ? 'text' : 'password');
      var icon = btn.querySelector('i');
      if (icon) icon.className = isPass ? 'fa fa-eye-slash' : 'fa fa-eye';
    });
  })();
  </script>
<?php else: ?>
  <?php if($editRequestToken !== '' && $view !== 'edit'): ?>
    <section class="ap-panel ap-card ap-edit-approval-card" id="agentEditApproval" data-token="<?= h($editRequestToken) ?>">
      <div class="ap-card-title">
        <i class="fa fa-shield"></i>
        <div><h2>طلب تعديل محمي</h2><p id="agentEditApprovalMessage">يجري التحقق من قرار الإدارة…</p></div>
      </div>
      <div class="ap-form-actions">
        <a class="ap-btn ap-btn-primary" id="agentEditApprovalOpen" href="#" hidden><i class="fa fa-pencil"></i> فتح تعديل المشترك</a>
        <button class="ap-btn" id="agentEditApprovalRefresh" type="button"><i class="fa fa-refresh"></i> تحديث حالة الطلب</button>
      </div>
    </section>
  <?php endif; ?>
  <section class="ap-profile-grid" id="balance">
    <div class="ap-stat"><span>المعتمد</span><strong><?= h($agent['name'] ?? '') ?></strong><small><?= h($agent['username'] ?? '') ?><?= !empty($agent['phone']) ? ' · ' . h($agent['phone']) : '' ?></small></div>
    <div class="ap-stat"><span>الرصيد المستحق</span><strong><?= ua_agent_money($agent['balance_cached'] ?? $agent['balance'] ?? 0) ?></strong></div>
    <div class="ap-stat"><span>معلومات البرنامج</span><strong>v<?= h($appInfo['version'] ?? '0.0.0') ?></strong><small><?= !empty($appInfo['build']) ? 'Build ' . h($appInfo['build']) : 'Network Customers' ?></small></div>
  </section>

  <section class="ap-dashboard">
    <div class="ap-panel ap-card ap-services-panel">
      <div class="ap-card-title"><i class="fa fa-th-large"></i><div><h2>الخدمات</h2></div></div>
      <div class="ap-action-grid">
        <a class="ap-action <?= $view === 'add' ? 'is-active' : '' ?>" href="<?= h(ap_workspace_url($agentId, 'add')) ?>"><i class="fa fa-user-plus"></i><div><strong>إضافة مشترك</strong></div></a>
        <a class="ap-action <?= $view === 'status' ? 'is-active' : '' ?>" href="<?= h(ap_workspace_url($agentId, 'status')) ?>"><i class="fa fa-heartbeat"></i><div><strong>حالة مشترك</strong></div></a>
        <a class="ap-action <?= $view === 'edit' ? 'is-active' : '' ?>" href="<?= h(ap_workspace_url($agentId, 'edit')) ?>"><i class="fa fa-pencil-square-o"></i><div><strong>تعديل مشترك</strong><small><i class="fa fa-lock"></i> بموافقة الإدارة</small></div></a>
        <a class="ap-action <?= $view === 'balance' ? 'is-active' : '' ?>" href="<?= h(ap_workspace_url($agentId, 'balance')) ?>"><i class="fa fa-balance-scale"></i><div><strong>رصيد المعتمد</strong></div></a>
        <a class="ap-action <?= $view === 'profile' ? 'is-active' : '' ?>" href="<?= h(ap_workspace_url($agentId, 'profile')) ?>"><i class="fa fa-id-card-o"></i><div><strong>الملف الشخصي</strong><small>بيانات الحساب وكلمة المرور</small></div></a>
        <a class="ap-action <?= $view === 'printers' ? 'is-active' : '' ?>" href="<?= h(ap_workspace_url($agentId, 'printers')) ?>"><i class="fa fa-print"></i><div><strong>إعدادات الطابعات</strong><small>طابعات الجهاز والطابعات المشتركة</small></div></a>
        <a class="ap-action <?= $view === 'billing' ? 'is-active' : '' ?>" href="<?= h(ap_workspace_url($agentId, 'billing')) ?>"><i class="fa fa-credit-card"></i><div><strong>استعلام وتسديد</strong></div></a>
      </div>
    </div>

    <div class="ap-workspace" data-workspace-view="<?= h($view) ?>">
    <?php if($view === 'home'): ?>
      <section class="ap-workspace-welcome">
        <span><i class="fa fa-th-large"></i></span>
      </section>
    <?php elseif($view === 'edit' && !$editAccessGranted): ?>
      <?php $editAccessStatus = (string)($editAccessRequest['status'] ?? ''); ?>
      <section class="ap-panel ap-card ap-edit-access-gate <?= $editAccessStatus === 'PENDING' ? 'ap-edit-approval-card' : '' ?>"
        <?= $editAccessStatus === 'PENDING' ? 'id="agentEditApproval" data-token="' . h($editRequestToken) . '"' : '' ?>>
        <div class="ap-card-title">
          <i class="fa <?= $editAccessStatus === 'PENDING' ? 'fa-clock-o' : 'fa-shield' ?>"></i>
          <div>
            <h2><?= $editAccessStatus === 'PENDING' ? 'بانتظار موافقة الإدارة' : 'طلب صلاحية تعديل المشترك' ?></h2>
            <p id="<?= $editAccessStatus === 'PENDING' ? 'agentEditApprovalMessage' : '' ?>">
              <?= $editAccessStatus === 'PENDING'
                ? 'تم إرسال الطلب. سيظهر شريط البحث تلقائياً بعد الموافقة.'
                : ($editAccessStatus === 'REJECTED'
                  ? 'تم رفض الطلب السابق. يمكنك إرسال طلب جديد عند الحاجة.'
                  : 'أرسل طلباً واحداً للحصول على صلاحية البحث وتعديل المشتركين لمدة 30 دقيقة.') ?>
            </p>
          </div>
        </div>
        <?php if($editAccessStatus === 'PENDING'): ?>
          <div class="ap-edit-access-state">
            <span class="ap-status-dot"></span>
            <strong>الطلب قيد المراجعة</strong>
          </div>
          <div class="ap-form-actions">
            <a class="ap-btn ap-btn-primary" id="agentEditApprovalOpen" href="#" hidden><i class="fa fa-search"></i> بدء البحث</a>
            <button class="ap-btn ap-btn-light" id="agentEditApprovalRefresh" type="button"><i class="fa fa-refresh"></i> تحديث حالة الطلب</button>
          </div>
        <?php else: ?>
          <form method="post" class="ap-edit-access-form">
            <?php ua_csrf_field(); ?>
            <input type="hidden" name="agent" value="<?= (int)$agentId ?>">
            <input type="hidden" name="view" value="edit">
            <div class="ap-field">
              <label for="editAccessNote">ملاحظة للإدارة <span class="ap-muted">(اختياري)</span></label>
              <input class="form-control" id="editAccessNote" name="request_note" maxlength="500" placeholder="سبب طلب التعديل أو ملاحظة مختصرة">
            </div>
            <button class="ap-btn ap-btn-primary" type="submit" name="request_edit_access" value="1"><i class="fa fa-paper-plane"></i> إرسال طلب الموافقة</button>
          </form>
        <?php endif; ?>
      </section>
    <?php elseif(in_array($view, ['add', 'status', 'profile', 'printers'], true)): ?>
      <?php
        $workspaceSources = [
          'add'=>'agent_subscriber_add.php',
          'status'=>'agent_subscriber_status.php',
          'profile'=>'agent_profile.php',
          'printers'=>'agent_output_devices.php',
        ];
        $workspaceTitles = [
          'add'=>'إضافة مشترك',
          'status'=>'حالة مشترك',
          'profile'=>'الملف الشخصي',
          'printers'=>'إعدادات الطابعات',
        ];
        $workspaceSrc = $workspaceSources[$view] . '?' . http_build_query(['agent'=>$agentId, 'workspace'=>1]);
      ?>
      <iframe class="ap-workspace-frame" src="<?= h($workspaceSrc) ?>" title="<?= h($workspaceTitles[$view]) ?>" loading="eager"></iframe>
    <?php elseif($view === 'balance'): ?>
      <section class="ap-panel ap-card ap-balance-page">
        <div class="ap-card-title"><i class="fa fa-balance-scale"></i><div><h2>رصيد المعتمد</h2><p>ملخص الرصيد المرحّل والمسجل في النسخة الرئيسية.</p></div></div>
        <div class="ap-balance-value"><?= ua_agent_money($agent['balance_cached'] ?? $agent['balance'] ?? 0) ?></div>
        <div class="ap-info-grid">
          <div class="ap-info"><span>اسم المعتمد</span><strong><?= h($agent['name'] ?? '') ?></strong></div>
          <div class="ap-info"><span>اسم المستخدم</span><strong dir="ltr"><?= h($agent['username'] ?? '') ?></strong></div>
          <div class="ap-info"><span>آخر تحديث</span><strong><?= h(date('Y-m-d H:i:s')) ?></strong></div>
        </div>
      </section>
    <?php else: ?>
    <div class="ap-billing-stack <?= $selectedSubscriber ? 'has-subscriber' : 'is-search-only' ?>">
      <div class="ap-panel ap-card ap-search-panel" id="subscriber-edit-search">
        <div class="ap-card-title">
          <i class="fa <?= $view === 'edit' ? 'fa-pencil-square-o' : 'fa-credit-card' ?>"></i>
          <div>
            <h2><?= $view === 'edit' ? 'تعديل مشترك' : 'استعلام وتسديد فاتورة' ?></h2>
            <p><?= $view === 'edit' ? 'ابحث عن المشترك لفتح بياناته ضمن صلاحية التعديل المعتمدة.' : 'ابحث عن مشترك ثم اختر الفاتورة غير المسددة.' ?></p>
          </div>
        </div>
        <form method="get" class="ap-search-form">
          <input type="hidden" name="agent" value="<?= (int)$agentId ?>">
          <input type="hidden" name="view" value="<?= h($view) ?>">
          <?php if($view === 'edit'): ?><input type="hidden" name="edit_request_token" value="<?= h($editRequestToken) ?>"><?php endif; ?>
          <div class="ap-field"><label>البحث عن المشترك</label><input class="form-control" name="q" data-ua-subscriber-search value="<?= h($q) ?>" placeholder="ID أو الاسم أو الهاتف أو حساب PPPoE" autocomplete="off"></div>
          <div class="ap-form-actions"><button class="ap-btn ap-btn-primary"><i class="fa fa-search"></i> بحث</button></div>
        </form>
        <?php if($q !== ''): ?>
          <div class="ap-search-results-list" role="listbox" aria-label="نتائج البحث عن المشترك">
            <?php if(!$results): ?>
              <div class="ap-empty">لا توجد نتائج مطابقة.</div>
            <?php else: ?>
              <?php foreach($results as $r): ?>
                <div class="ap-result-row <?= $view === 'edit' ? 'ap-result-row-edit' : '' ?>">
                  <form class="ap-result-form" method="get" action="agent_portal.php">
                    <input type="hidden" name="agent" value="<?= (int)$agentId ?>">
                    <input type="hidden" name="view" value="<?= h($view) ?>">
                    <input type="hidden" name="q" value="<?= h($q) ?>">
                    <input type="hidden" name="subscriber_id" value="<?= (int)$r['id'] ?>">
                    <?php if($view === 'edit'): ?><input type="hidden" name="edit_request_token" value="<?= h($editRequestToken) ?>"><?php endif; ?>
                    <button class="ap-result ap-result-button <?= ((int)$r['id'] === $selectedSubscriberId) ? 'is-selected' : '' ?>" type="submit">
                      <div class="ap-result-title"><?= h(agent_portal_customer_name($r)) ?></div>
                      <div class="ap-tags"><span class="ap-tag"><?= h($r['status'] ?? '-') ?></span><span class="ap-tag">#<?= (int)$r['id'] ?></span></div>
                    </button>
                  </form>
                  <?php if($view !== 'edit'): ?>
                  <a class="ap-router-button" href="subscriber_router_setup.php?agent=<?= (int)$agentId ?>&amp;subscriber_id=<?= (int)$r['id'] ?>" aria-label="إعداد راوتر <?= h(agent_portal_customer_name($r)) ?>"><svg class="ua-router-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 11V5m14 6V5"/><rect x="3" y="11" width="18" height="8" rx="2"/><circle cx="7" cy="15" r="1"/><circle cx="11" cy="15" r="1"/><path d="M15 15h3"/></svg><span>إعداد الراوتر</span></a>
                  <form method="post" class="ap-edit-request-form">
                    <?php ua_csrf_field(); ?>
                    <input type="hidden" name="view" value="<?= h($view) ?>">
                    <input type="hidden" name="subscriber_id" value="<?= (int)$r['id'] ?>">
                    <button class="ap-router-button ap-edit-request-button" type="submit" name="request_subscriber_edit" value="1" title="يتطلب موافقة الإدارة">
                      <i class="fa fa-pencil-square-o" aria-hidden="true"></i><span>تعديل مشترك</span><small><i class="fa fa-lock"></i> محمي</small>
                    </button>
                  </form>
                  <?php endif; ?>
                </div>
              <?php endforeach; ?>
            <?php endif; ?>
          </div>
        <?php endif; ?>
      </div>

      <?php if($selectedSubscriber && $view === 'edit' && $editAccessGranted): ?>
      <?php
        $editWorkspaceSrc = 'subscribers_edit.php?' . http_build_query([
          'id'=>(int)$selectedSubscriberId,
          'agent'=>(int)$agentId,
          'agent_edit_token'=>$editRequestToken,
        ]);
      ?>
      <section class="ap-edit-workspace-panel">
        <iframe class="ap-workspace-frame ap-edit-workspace-frame" src="<?= h($editWorkspaceSrc) ?>" title="تعديل <?= h(agent_portal_customer_name($selectedSubscriber)) ?>" loading="eager"></iframe>
      </section>
      <?php elseif($selectedSubscriber && $view === 'billing'): ?>
      <section class="ap-panel ap-card ap-invoice-panel">
        <div class="ap-card-title"><i class="fa fa-file-text-o"></i><div><h2>حالة الفواتير</h2><p>الفواتير الأخيرة للمشترك المحدد.</p></div></div>
          <div class="ap-info-grid mb-3">
            <div class="ap-info"><span>المشترك</span><strong><?= h(agent_portal_customer_name($selectedSubscriber)) ?></strong></div>
            <div class="ap-info"><span>حالة الاشتراك</span><strong><?= h($selectedSubscriber['status'] ?? '-') ?></strong></div>
            <div class="ap-info"><span>الباقة / السرعة</span><strong><?= h(trim((string)($selectedSubscriber['package_name'] ?? '') . ' ' . (string)($selectedSubscriber['speed_name'] ?? ''))) ?></strong></div>
            <div class="ap-info"><span>نوع الوثيقة</span><strong><?= h($selectedSubscriber['document_type'] ?? '—') ?></strong></div>
            <div class="ap-info"><span>رقم الوثيقة</span><strong dir="ltr"><?= h($selectedSubscriber['document_number'] ?? '—') ?></strong></div>
            <div class="ap-info"><span>الرقم الوطني</span><strong dir="ltr"><?= h($selectedSubscriber['national_id'] ?? '—') ?></strong></div>
          </div>
          <div class="ap-selected-actions mb-3">
            <a class="ap-btn ap-btn-success" href="subscriber_router_setup.php?agent=<?= (int)$agentId ?>&amp;subscriber_id=<?= (int)$selectedSubscriberId ?>"><svg class="ua-router-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 11V5m14 6V5"/><rect x="3" y="11" width="18" height="8" rx="2"/><circle cx="7" cy="15" r="1"/><circle cx="11" cy="15" r="1"/><path d="M15 15h3"/></svg> إعداد الراوتر</a>
            <form method="post" class="m-0">
              <?php ua_csrf_field(); ?>
              <input type="hidden" name="view" value="<?= h($view) ?>">
              <input type="hidden" name="subscriber_id" value="<?= (int)$selectedSubscriberId ?>">
              <button class="ap-btn ap-btn-primary" type="submit" name="request_subscriber_edit" value="1"><i class="fa fa-lock"></i> طلب تعديل المشترك</button>
            </form>
          </div>
          <?php if(!$invoices): ?>
            <div class="ap-empty">لا توجد فواتير لهذا المشترك.</div>
          <?php else: ?>
            <div class="table-responsive">
              <table class="ap-table">
                <thead><tr><th>#</th><th>الدورة</th><th>النوع</th><th>المبلغ</th><th>الحالة</th><th>الإجراء</th></tr></thead>
                <tbody>
                <?php foreach($invoices as $inv): $paid = ua_agent_invoice_is_paid($inv); $paymentDue = finance_invoice_payment_due($inv); ?>
                  <tr>
                    <td><?= (int)$inv['id'] ?></td>
                    <td><?= h($inv['cycle_month'] ?? '-') ?></td>
                    <td><?= h($inv['invoice_type'] ?? 'BASE') ?></td>
                    <td><?= ua_agent_money($inv['amount'] ?? 0) ?></td>
                    <td><span class="ap-tag <?= $paid ? 'ap-tag-green' : 'ap-tag-red' ?>"><?= $paid ? 'مدفوعة' : 'بحاجة إلى تسديد' ?></span></td>
                    <td>
                      <div class="d-flex align-items-center gap-2">
                        <a class="ap-btn ap-btn-light" target="_blank" rel="noopener" href="print_invoice.php?id=<?= (int)$inv['id'] ?>&amp;paper=80mm&amp;auto=1&amp;agent=<?= (int)$agentId ?>" title="طباعة الفاتورة"><i class="fa fa-print"></i></a>
                        <?php if($paid): ?>
                          <span class="ap-muted"><?= h($inv['paid_at'] ?? '-') ?></span>
                        <?php elseif(!$paymentDue): ?>
                          <span class="ap-muted">يتفعل يوم الاستحقاق</span>
                        <?php else: ?>
                        <form method="post" class="d-flex gap-2">
                          <?php ua_csrf_field(); ?>
                          <input type="hidden" name="agent" value="<?= (int)$agentId ?>">
                          <input type="hidden" name="view" value="<?= h($view) ?>">
                          <input type="hidden" name="invoice_id" value="<?= (int)$inv['id'] ?>">
                          <input type="hidden" name="subscriber_id" value="<?= (int)$selectedSubscriber['id'] ?>">
                          <input type="hidden" name="q" value="<?= h($q) ?>">
                          <input class="form-control form-control-sm" type="password" name="confirm_password" placeholder="كلمة مرور المعتمد" required>
                          <button class="ap-btn ap-btn-success" name="pay_invoice"><i class="fa fa-check"></i></button>
                        </form>
                        <?php endif; ?>
                      </div>
                    </td>
                  </tr>
                <?php endforeach; ?>
                </tbody>
              </table>
            </div>
          <?php endif; ?>
      </section>
      <?php endif; ?>
    </div>
    <?php endif; ?>
    </div>
  </section>
<?php endif; ?>

<?php if($logged && $editRequestToken !== ''): ?>
<script>
(function(){
  var card = document.getElementById('agentEditApproval');
  var message = document.getElementById('agentEditApprovalMessage');
  var open = document.getElementById('agentEditApprovalOpen');
  var refresh = document.getElementById('agentEditApprovalRefresh');
  if (!card || !message || !open || !refresh) return;
  var token = card.getAttribute('data-token') || '';
  var busy = false;
  async function check(){
    if (busy) return;
    busy = true;
    refresh.disabled = true;
    try {
      var response = await fetch('api/agent_edit_request_status.php?token=' + encodeURIComponent(token) + '&_=' + Date.now(), {
        credentials:'same-origin', cache:'no-store', headers:{'Accept':'application/json'}
      });
      var data = await response.json();
      if (!response.ok || !data.ok) throw new Error(data.message || 'تعذر قراءة حالة الطلب.');
      message.textContent = data.message || '';
      card.classList.toggle('is-approved', !!data.granted);
      card.classList.toggle('is-rejected', data.status === 'REJECTED');
      if (data.granted && data.scope === 'PORTAL_EDIT' && data.portal_url) {
        window.location.replace(data.portal_url);
        return;
      }
      if (data.granted && data.edit_url) {
        open.href = data.edit_url;
        open.hidden = false;
      } else {
        open.hidden = true;
      }
    } catch (error) {
      message.textContent = error && error.message ? error.message : 'تعذر قراءة حالة الطلب.';
    } finally {
      busy = false;
      refresh.disabled = false;
    }
  }
  refresh.addEventListener('click', check);
  check();
  var timer = setInterval(function(){
    if (document.hidden || !open.hidden) return;
    check();
  }, 10000);
  window.addEventListener('beforeunload', function(){ clearInterval(timer); });
})();
</script>
<?php endif; ?>
<?php finance_render_auto_print($conn, (int)($_GET['auto_print_invoice'] ?? 0), $agentId); ?>
<?php agent_portal_render_shell_end(); ?>
