<?php
// Agent-facing subscriber creation page, aligned with the main subscriber add form.

require_once __DIR__ . '/agent_subscriber_service.php';
require_once __DIR__ . '/subscriber_contracts_lib.php';
require_once __DIR__ . '/output_devices_lib.php';

$conn = ensure_db(true);
mysqli_report(MYSQLI_REPORT_OFF);
$ctx = agent_portal_boot($conn);
$agent = $ctx['agent'];
$agentId = (int)$ctx['agent_id'];
$msg = '';
$err = '';
$warn = '';
$created = null;
$pppoeAccountSuffix = subs_policy_pppoe_domain($conn);

if (!$agent || empty($ctx['logged'])) {
  header('Location: agent_portal.php' . ($agentId > 0 ? ('?agent=' . $agentId) : ''));
  exit;
}
if ((int)($agent['is_active'] ?? 1) !== 1 || (int)($agent['portal_enabled'] ?? 1) !== 1) {
  header('Location: agent_portal.php?agent=' . $agentId);
  exit;
}

agent_subscriber_prepare_schema($conn);
$speeds = function_exists('subscriber_ref_fetch_speeds') ? subscriber_ref_fetch_speeds($conn) : [];
$packages = function_exists('subscriber_ref_fetch_packages') ? subscriber_ref_fetch_packages($conn) : [];
$sectors = function_exists('subscriber_ref_fetch_sectors') ? subscriber_ref_fetch_sectors($conn, true) : [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (!ua_csrf_verify()) {
    $err = 'انتهت صلاحية الطلب. أعد المحاولة.';
  } else {
    $result = agent_subscriber_create($conn, $agent, $_POST + ['is_paid'=>($_POST['action'] ?? '') === 'save_paid']);
    if (empty($result['ok'])) {
      $err = (string)($result['error'] ?? 'تعذر حفظ المشترك.');
    } else {
      $created = $result;
      $msg = 'تمت إضافة المشترك وترحيل العملية إلى النسخة الأساسية وسجل المعتمد.';
      if (!empty($result['warning'])) $warn = 'تنبيه MikroTik: ' . (string)$result['warning'];
      $_POST = [];
      $fresh = ua_agent_get($conn, $agentId);
      if ($fresh) { $agent = $fresh; $ctx['agent'] = $fresh; }
    }
  }
}

$defaultSectorId = (int)($_POST['sector_id'] ?? 0);
if ($defaultSectorId <= 0 && $sectors) $defaultSectorId = (int)($sectors[0]['id'] ?? 0);

$speedMap = [];
foreach ($speeds as $s) $speedMap[(int)($s['id'] ?? 0)] = $s;
$packageMap = [];
foreach ($packages as $p) $packageMap[(int)($p['id'] ?? 0)] = $p;

function ap_old(string $key, string $default = ''): string {
  return h((string)($_POST[$key] ?? $default));
}

$isMissingReference = empty($speeds) || empty($packages) || empty($sectors);
$agentContractTemplate = sc_default_template($conn);

agent_portal_render_head('إضافة مشترك - واجهة المعتمد', ['assets/css/subscriber_info_print_actions.css']);
agent_portal_render_shell_start($conn, $ctx, 'add');
?>
<?php if($msg): ?><div class="ap-alert alert-success"><?= h($msg) ?></div><?php endif; ?>
<?php if($warn): ?><div class="ap-alert alert-warning"><?= h($warn) ?></div><?php endif; ?>
<?php if($err): ?><div class="ap-alert alert-danger"><?= h($err) ?></div><?php endif; ?>

<?php if($created): ?>
  <section class="ap-panel ap-card mb-3">
    <div class="ap-card-title"><i class="fa fa-check"></i><div><h2>تم إنشاء المشترك</h2></div></div>
    <div class="ap-info-grid">
      <div class="ap-info"><span>رقم المشترك</span><strong>#<?= (int)$created['subscriber_id'] ?></strong></div>
      <div class="ap-info"><span>حساب PPPoE</span><strong dir="ltr"><?= h($created['ppp_username']) ?></strong></div>
      <div class="ap-info"><span>كلمة المرور</span><strong dir="ltr"><?= h($created['ppp_password']) ?></strong></div>
      <div class="ap-info"><span>الفاتورة</span><strong>#<?= (int)$created['invoice_id'] ?></strong></div>
      <div class="ap-info"><span>المبلغ المرحل</span><strong><?= ua_agent_money($created['amount']) ?></strong></div>
      <div class="ap-info"><span>رصيد المعتمد الحالي</span><strong><?= ua_agent_money($agent['balance_cached'] ?? $agent['balance'] ?? 0) ?></strong></div>
    </div>
    <div class="sip-agent-print-action">
      <a class="ap-btn ap-btn-primary"
         href="subscriber_info_print.php?subscriber_id=<?= (int)$created['subscriber_id'] ?>&amp;agent=<?= (int)$agentId ?>"
         data-subscriber-info-print
         data-subscriber-id="<?= (int)$created['subscriber_id'] ?>"
         data-agent="<?= (int)$agentId ?>">
        <i class="fa fa-print"></i>
        طباعة معلومات المشترك وأكواد الاتصال
      </a>
    </div>
    <div class="ap-contract-print-box">
      <div class="ap-card-title"><i class="fa fa-file-word-o"></i><div><h2>طباعة عقد المشترك</h2><p>يُعبأ تلقائياً من القالب المعتمد في النسخة الرئيسية.</p></div></div>
      <?php if($agentContractTemplate): ?>
        <form method="post" action="agent_contract_download.php" class="ap-contract-print-form" id="agentContractPrintForm">
          <?php ua_csrf_field(); ?>
          <input type="hidden" name="agent" value="<?= (int)$agentId ?>">
          <input type="hidden" name="subscriber_id" value="<?= (int)$created['subscriber_id'] ?>">
          <div class="ap-contract-template-name"><i class="fa fa-check-circle"></i> القالب المعتمد: <strong><?= h((string)$agentContractTemplate['name']) ?></strong></div>
          <label><input type="radio" name="contract_mode" value="full" checked><span><strong>طباعة كامل العقد</strong><small>يشمل جميع صفحات القالب.</small></span></label>
          <label><input type="radio" name="contract_mode" value="changed"><span><strong>الصفحات المعبأة فقط</strong><small>يشمل الصفحات التي أُدرجت فيها بيانات المشترك.</small></span></label>
          <div class="ap-contract-print-actions">
            <button class="ap-btn ap-btn-primary" type="button" data-ua-print-contract data-form="#agentContractPrintForm" data-delivery="print"><i class="fa fa-print"></i> توليد وطباعة العقد</button>
            <button class="ap-btn" type="submit" name="delivery" value="download"><i class="fa fa-download"></i> تنزيل ملف Word</button>
          </div>
        </form>
      <?php else: ?>
        <div class="ap-alert alert-warning">لا يوجد قالب عقد معتمد حالياً في النسخة الرئيسية.</div>
      <?php endif; ?>
    </div>
  </section>
<?php endif; ?>

<section class="ap-agent-add-page ua-subscriber-child-page ua-sub-child-add sa-figma-page">
  <div class="ua-page-v2 sa-wrap">
    <?php if($isMissingReference): ?>
      <div class="ap-alert alert-warning sa-empty">
        يلزم وجود سرعات وباقات وقطاعات مفعلة قبل إضافة مشترك. راجع الإعدادات أولاً.
      </div>
    <?php endif; ?>

    <form method="post" enctype="multipart/form-data">
      <?php ua_csrf_field(); ?>
      <input type="hidden" name="agent" value="<?= (int)$agentId ?>">
      <input type="hidden" name="sector_id" value="<?= (int)$defaultSectorId ?>">

      <div class="sa-grid">
        <div class="sa-input-zone">
          <div class="sa-card">
            <div class="sa-card-head">
              <h3>بيانات المشترك</h3>
            </div>
            <div class="sa-card-body">
              <div class="sa-form-grid sa-personal-grid">
                <div class="sa-field">
                  <label>الاسم</label>
                  <input name="first_name" class="form-control" value="<?= ap_old('first_name') ?>" required>
                </div>
                <div class="sa-field">
                  <label>اسم الأب</label>
                  <input name="father_name" class="form-control" value="<?= ap_old('father_name') ?>" required>
                </div>
                <div class="sa-field">
                  <label>الكنية</label>
                  <input name="last_name" class="form-control" value="<?= ap_old('last_name') ?>" required>
                </div>
                <div class="sa-field">
                  <label>اسم الأم</label>
                  <input name="mother_name" class="form-control" value="<?= ap_old('mother_name') ?>" required>
                </div>
                <div class="sa-field">
                  <label>تاريخ الميلاد</label>
                  <input type="date" name="birth_date" class="form-control" value="<?= ap_old('birth_date') ?>">
                </div>
                <div class="sa-field">
                  <label>نوع الوثيقة</label>
                  <?php $oldDocumentType = (string)($_POST['document_type'] ?? 'هوية شخصية'); ?>
                  <select name="document_type" class="form-select" required>
                    <?php foreach((function_exists('subscriber_document_types') ? subscriber_document_types() : ['هوية شخصية','إخراج قيد','جواز سفر']) as $type): ?>
                      <option value="<?= h($type) ?>" <?= $oldDocumentType === $type ? 'selected' : '' ?>><?= h($type) ?></option>
                    <?php endforeach; ?>
                  </select>
                </div>
                <div class="sa-field">
                  <label>رقم الوثيقة</label>
                  <input name="document_number" class="form-control" value="<?= ap_old('document_number') ?>">
                </div>
                <div class="sa-field">
                  <label>رقم الهاتف</label>
                  <input name="phone" class="form-control" inputmode="tel" value="<?= ap_old('phone') ?>" required>
                </div>
                <div class="sa-field">
                  <label>القيد</label>
                  <input name="record_number" class="form-control" value="<?= ap_old('record_number') ?>">
                </div>
                <div class="sa-field sa-field-span-2">
                  <label>الرقم الوطني <button type="button" class="sa-help-tip" aria-label="تلميح" data-tip="يمكن إدخاله يدوياً أو تمريره مباشرة من قارئ الباركود إذا كان يعمل كلوحة مفاتيح.">?</button></label>
                  <input name="national_id" class="form-control" inputmode="numeric" value="<?= ap_old('national_id') ?>">
                </div>
                <div class="sa-field sa-field-full">
                  <label>العنوان الحالي</label>
                  <input name="address_area" class="form-control" value="<?= ap_old('address_area') ?>">
                </div>
                <div class="sa-field sa-field-full">
                  <label>ملاحظات</label>
                  <textarea name="notes" class="form-control" rows="2" placeholder="اختياري"><?= ap_old('notes') ?></textarea>
                </div>
              </div>
            </div>
          </div>

          <div class="sa-card sa-service-card">
            <div class="sa-card-head">
              <h3>الخدمة والفاتورة <button type="button" class="sa-help-tip sa-help-tip--section" aria-label="تلميح" data-tip="عند الضغط على حفظ فقط يتم إنشاء المشترك والفاتورة ويبقى المشترك موقوفاً حتى التسديد. وعند الضغط على حفظ وتسديد يتم السداد والتفعيل مباشرة.">?</button></h3>
            </div>
            <div class="sa-card-body">
              <div class="sa-form-grid sa-3 sa-service-line">
                <div class="sa-field">
                  <label>السرعة</label>
                  <select name="speed_id" id="speed_id" class="form-select" required>
                    <option value="">— اختر السرعة —</option>
                    <?php foreach($speeds as $speed): ?>
                      <option value="<?= (int)$speed['id'] ?>" <?= ((int)($_POST['speed_id'] ?? 0)===(int)$speed['id'] ? 'selected' : '') ?>>
                        <?= h($speed['speed_name']) ?> — <?= number_format((float)($speed['price'] ?? 0), 2) ?>
                      </option>
                    <?php endforeach; ?>
                  </select>
                </div>
                <div class="sa-field">
                  <label>الباقة</label>
                  <select name="package_id" id="package_id" class="form-select" required>
                    <option value="">— اختر الباقة —</option>
                    <?php foreach($packages as $package): ?>
                      <option value="<?= (int)$package['id'] ?>" <?= ((int)($_POST['package_id'] ?? 0)===(int)$package['id'] ? 'selected' : '') ?>>
                        <?= h($package['package_name']) ?>
                        <?php if(($package['quota_gb'] ?? null) !== null && ($package['quota_gb'] ?? '') !== ''): ?> — <?= (int)$package['quota_gb'] ?>GB<?php endif; ?>
                        — <?= number_format((float)($package['price'] ?? 0), 2) ?>
                      </option>
                    <?php endforeach; ?>
                  </select>
                </div>
                <div class="sa-field">
                  <label>IP ثابت للمشترك <button type="button" id="staticIpHint" class="sa-help-tip" aria-label="تلميح" data-tip="اختياري، إذا ترك فارغاً يأخذ المشترك IP من الـ Pool">?</button></label>
                  <input name="ip_address" id="staticIpInput" class="form-control" inputmode="decimal" dir="ltr" value="<?= ap_old('ip_address') ?>" placeholder="192.168.1.100">
                </div>
              </div>
            </div>
          </div>

          <div class="sa-card sa-identity-card">
            <div class="sa-card-head">
              <h3>الهوية والمرفقات</h3>
            </div>
            <div class="sa-card-body">
              <div class="sa-form-grid sa-3">
                <div class="sa-field">
                  <label>صورة الهوية - الوجه الأمامي</label>
                  <label class="sa-file-upload">
                    <input type="file" name="id_card_front" accept=".jpg,.jpeg,.png,.webp,.pdf,image/*,application/pdf" capture="environment">
                    <span>اضغط للرفع</span>
                    <small>JPG, PNG</small>
                  </label>
                </div>
                <div class="sa-field">
                  <label>صورة الهوية - الوجه الخلفي</label>
                  <label class="sa-file-upload">
                    <input type="file" name="id_card_back" accept=".jpg,.jpeg,.png,.webp,.pdf,image/*,application/pdf" capture="environment">
                    <span>اضغط للرفع</span>
                    <small>JPG, PNG</small>
                  </label>
                </div>
                <div class="sa-field">
                  <label>ملف هوية واحد PDF (اختياري)</label>
                  <label class="sa-file-upload">
                    <input type="file" name="id_card_pdf" accept=".pdf,application/pdf">
                    <span>اضغط للرفع</span>
                    <small>PDF فقط</small>
                  </label>
                </div>
              </div>
            </div>
          </div>
        </div>

        <div class="sa-preview">
          <div class="sa-card">
            <div class="sa-card-head"><h3>معاينة الحساب</h3></div>
            <div class="sa-card-body">
              <div class="sa-kpi">
                <div class="sa-kpi-title">اسم حساب PPPoE</div>
                <div class="sa-kpi-value" id="pppPreview">—</div>
              </div>
              <div class="sa-kpi mt-2">
                <div class="sa-kpi-title">كلمة المرور التلقائية</div>
                <div class="sa-kpi-value" id="passPreview">—</div>
              </div>
            </div>
          </div>

          <div class="sa-card">
            <div class="sa-card-head"><h3>ملخص السرعة والفاتورة</h3></div>
            <div class="sa-card-body">
              <div class="sa-summary">
                <ul>
                  <li>السرعة: <strong id="speedPreview">—</strong></li>
                  <li>الباقة: <strong id="packagePreview">—</strong></li>
                  <li>الـ Rate Limit: <strong id="ratePreview">—</strong></li>
                  <li>الملف التعريفي: <strong id="profilePreview">—</strong></li>
                  <li>نوع IP: <strong id="ipTypePreview">IP ديناميكي</strong></li>
                  <li>من الـ Pool: <strong id="poolPreview">نعم</strong></li>
                  <li>الحجز: <strong id="quotaPreview">مفتوح/غير محدد</strong></li>
                  <li>سعر السرعة: <strong id="speedPricePreview">0.00</strong></li>
                  <li>سعر الباقة: <strong id="packagePricePreview">0.00</strong></li>
                  <li>رسوم الاشتراك: <strong id="feePreview">0.00</strong></li>
                  <li>الإجمالي الأولي: <strong id="totalPreview">0.00</strong></li>
                </ul>
              </div>
            </div>
          </div>

          <div class="sa-actions">
            <button class="btn btn-success" type="submit" name="action" value="save_paid" <?= $isMissingReference ? 'disabled' : '' ?>>
              حفظ وتسديد
            </button>
            <button class="btn btn-outline-secondary" type="submit" name="action" value="save_only" <?= $isMissingReference ? 'disabled' : '' ?>>
              حفظ فقط
            </button>
          </div>
        </div>
      </div>
    </form>
  </div>
</section>

<script>
  const pppoeAccountSuffix = <?= json_encode($pppoeAccountSuffix, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
(function(){
  const speedMap = <?= json_encode($speedMap, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES) ?>;
  const packageMap = <?= json_encode($packageMap, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES) ?>;

  function translitAr(text){
    const map = {
      'ا':'a','أ':'a','إ':'e','آ':'a','ء':'','ؤ':'o','ئ':'e','ى':'a','ة':'a',
      'ب':'b','ت':'t','ث':'th','ج':'j','ح':'h','خ':'kh','د':'d','ذ':'dh','ر':'r','ز':'z','س':'s','ش':'sh','ص':'s','ض':'d','ط':'t','ظ':'z',
      'ع':'e','غ':'gh','ف':'f','ق':'q','ك':'k','ل':'l','م':'m','ن':'n','ه':'h','و':'w','ي':'y'
    };
    return (text || '').split('').map(ch => map[ch] ?? ch).join('').toLowerCase().replace(/[^a-z0-9\s]+/g,' ').replace(/\s+/g,' ').trim();
  }
  function byName(name){ return document.querySelector('[name="' + name + '"]'); }
  function buildSlug(){
    const firstPart = value => (value || '').trim().split(/[\s,،؛;]+/u)[0] || '';
    const first = firstPart(byName('first_name')?.value || '');
    const last = firstPart(byName('last_name')?.value || '');
    const raw = (translitAr(first).replace(/\s+/g,'.') + '.' + translitAr(last).replace(/\s+/g,'.')).replace(/\.+/g,'.').replace(/^\.|\.$/g,'');
    return (raw || 'subscriber') + '@' + pppoeAccountSuffix;
  }
  function buildPass(){
    const mother = byName('mother_name')?.value || '';
    const phone = (byName('phone')?.value || '').replace(/\D+/g,'');
    const latin = translitAr(mother).replace(/[^a-z]/g,'');
    const initial = (latin.charAt(0) || 'X').toUpperCase();
    const tail = (phone.padStart(5,'0')).slice(-5) || '00000';
    return initial + tail;
  }
  function getSelectedProfile(speed, pkg){
    return speed.mikrotik_profile || pkg.mikrotik_profile || 'pppoe-prof';
  }
  function text(id, value){
    const el = document.getElementById(id);
    if (el) el.textContent = value;
  }
  function updatePreview(){
    const speedId = parseInt(document.getElementById('speed_id')?.value || '0', 10);
    const packageId = parseInt(document.getElementById('package_id')?.value || '0', 10);
    const speed = speedMap[speedId] || {};
    const pkg = packageMap[packageId] || {};
    const speedPrice = parseFloat(speed.price || 0);
    const pkgPrice = parseFloat(pkg.price || 0);
    const fee = parseFloat(pkg.subscription_fee || 0);
    const total = speedPrice + pkgPrice + fee;
    const rate = speed.rate_limit || ((speed.speed_name || '') ? `${speed.speed_name}/${speed.speed_name}` : '—');
    const quota = (pkg.quota_gb !== null && pkg.quota_gb !== undefined && pkg.quota_gb !== '') ? `${pkg.quota_gb} GB` : 'مفتوح / غير محدد';
    const staticIpValue = (document.getElementById('staticIpInput')?.value || '').trim();

    text('pppPreview', buildSlug());
    text('passPreview', buildPass());
    text('speedPreview', speed.speed_name || '—');
    text('packagePreview', pkg.package_name || '—');
    text('ratePreview', rate);
    text('profilePreview', getSelectedProfile(speed, pkg));
    text('ipTypePreview', staticIpValue ? 'IP ثابت' : 'IP ديناميكي');
    text('poolPreview', staticIpValue ? 'لا' : 'نعم');
    text('quotaPreview', quota);
    text('speedPricePreview', speedPrice.toFixed(2));
    text('packagePricePreview', pkgPrice.toFixed(2));
    text('feePreview', fee.toFixed(2));
    text('totalPreview', total.toFixed(2));
  }
  ['first_name','last_name','mother_name','phone'].forEach(name => {
    const el = byName(name);
    if (el) el.addEventListener('input', updatePreview);
  });
  ['speed_id','package_id'].forEach(id => {
    const el = document.getElementById(id);
    if (el) el.addEventListener('change', updatePreview);
  });
  const staticIpInput = document.getElementById('staticIpInput');
  if (staticIpInput) staticIpInput.addEventListener('input', updatePreview);
  updatePreview();
})();
</script>
<?php
$agentOutputFileRoute = [
  'commandKey'=>'contract_print',
  'scopeBase'=>ua_output_agent_scope($agentId),
  'configUrl'=>'output_route_config.php',
  'fileProxyUrl'=>'output_file_proxy.php',
  'logUrl'=>'output_job_log.php',
  'contractLogUrl'=>'contract_print_log.php',
  'csrfToken'=>ua_csrf_token(),
];
?>
<script>window.UA_OUTPUT_FILE_ROUTE=<?= json_encode($agentOutputFileRoute, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES) ?>;</script>
<script src="assets/js/ua_output_file_router.js?v=<?= (int)(@filemtime(__DIR__ . '/assets/js/ua_output_file_router.js') ?: 1) ?>"></script>
<script src="assets/js/subscriber_info_print_launcher.js?v=<?= (int)(@filemtime(__DIR__ . '/assets/js/subscriber_info_print_launcher.js') ?: 1) ?>"></script>
<?php agent_portal_render_shell_end(); ?>
