<?php
// admin/subscribers_view.php (FINAL - schema accurate, shows archived too)

if (session_status() === PHP_SESSION_NONE) session_start();

require_once __DIR__ . '/helpers.php';
require_once __DIR__ . '/lang.php';
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/db_bootstrap.php';
require_once __DIR__ . '/mikrotik_lib.php';
require_once __DIR__ . '/super_admin_guard.php';

require_login('index.php?login=1');

// حماية العرض بكلمة مرور السوبر أدمن (مؤقت 10 دقائق)
require_super_admin_confirmation('عرض بيانات مشترك');
if (function_exists('require_perm')) require_perm('can_subscribers');

if (function_exists('ensure_db')) ensure_db(true);
$conn = $GLOBALS['conn'] ?? null;
if(!$conn) die('DB connection failed');

if (!function_exists('h')) { function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } }
if (!function_exists('sv_first_value')) {
function sv_first_value(array $row, array $keys): string {
  foreach ($keys as $key) {
    $v = trim((string)($row[$key] ?? ''));
    if ($v !== '') return $v;
  }
  return '';
}
}
if (!function_exists('sv_attachment_info')) {
function sv_attachment_info(string $path): array {
  $path = trim(str_replace('\\', '/', $path));
  if ($path === '' || preg_match('~^[a-z][a-z0-9+.-]*:~i', $path) || strpos($path, '..') !== false) {
    return ['url'=>'', 'ext'=>'', 'exists'=>false, 'is_image'=>false, 'is_pdf'=>false];
  }
  $path = ltrim($path, '/');
  $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
  return [
    'url' => $path,
    'ext' => $ext,
    'exists' => is_file(__DIR__ . '/' . $path),
    'is_image' => in_array($ext, ['jpg','jpeg','png','webp','gif'], true),
    'is_pdf' => $ext === 'pdf',
  ];
}
}

$id = (int)($_GET['id'] ?? 0);
if($id<=0){ header('Location: subscribers.php'); exit; }

$sub = $conn->query("SELECT * FROM subscribers WHERE id=$id LIMIT 1");
if(!$sub || !$sub->num_rows){
  $_SESSION['flash_err'] = 'المشترك غير موجود';
  header('Location: subscribers.php'); exit;
}
$sub = $sub->fetch_assoc();

$tab = $_GET['tab'] ?? 'info';
$tab = in_array($tab, ['info','identity','invoices','mikrotik'], true) ? $tab : 'info';

$pppUser = trim((string)($sub['ppp_username'] ?? ''));
if($pppUser==='') $pppUser = trim((string)($sub['username'] ?? ''));
$pppPass = trim((string)($sub['ppp_password'] ?? ''));
if($pppPass==='') $pppPass = trim((string)($sub['password_plain'] ?? ''));
$pppProf = trim((string)($sub['ppp_profile'] ?? ''));
$serial  = trim((string)($sub['mikrotik_serial'] ?? ''));

$pkg = $sub['package'] ?: ($sub['package_name'] ?: '-');
$spd = $sub['speed'] ?: ($sub['speed_name'] ?: '-');
$idFront = sv_attachment_info(sv_first_value($sub, ['id_card_front','id_front']));
$idBack = sv_attachment_info(sv_first_value($sub, ['id_card_back','id_back']));
$idPdf = sv_attachment_info(sv_first_value($sub, ['id_card_pdf','id_pdf']));
$sameIdImage = $idFront['url'] !== '' && $idFront['url'] === $idBack['url'];

$page_title = 'تفاصيل مشترك';
$UA_FORCE_DESIGN_V2 = true;
$UA_PAGE_CSS = ['assets/css/ua_subscriber_view_page.css'];
include __DIR__ . '/header.php';
include __DIR__ . '/sidebar.php';

// MikroTik live status (computed only when tab=mikrotik)
$mk = [
  'api_ok' => false,
  'router' => '',
  'exists' => false,
  'disabled' => null,
  'active' => false,
  'color' => 'gray',
  'label' => 'غير معروف/فشل اتصال',
  'detail' => ''
];

if($tab === 'mikrotik'){
  $api = mt_api_connect();
  if($api){
    $mk['api_ok'] = true;
    $hasCmd  = method_exists($api,'command');
    $hasComm = method_exists($api,'comm');
    $mt = function($path, $params=[]) use ($api,$hasCmd,$hasComm){
      if($hasCmd){
        $arr = [$path];
        foreach($params as $k=>$v){
          if($k==='.id') $arr[] = '=.id='.$v;
          elseif(strlen((string)$k) && (($k[0] ?? '') === '?' || ($k[0] ?? '') === '~')) $arr[] = $k.'='.$v;
          else $arr[] = '='.$k.'='.$v;
        }
        return $api->command($arr);
      }
      if($hasComm){
        return $api->comm($path, $params);
      }
      return null;
    };

    try{
      $idn = $mt('/system/identity/print', []);
      if(is_array($idn) && isset($idn[0]['name'])) $mk['router'] = $idn[0]['name'];
    }catch(Exception $e){}

    // Secret: query only this subscriber instead of loading all PPP secrets.
    try{
      $se = ($pppUser !== '') ? $mt('/ppp/secret/print', ['?name'=>$pppUser]) : [];
      if(is_array($se)){
        foreach($se as $s){
          if(($s['name'] ?? '') === $pppUser){
            $mk['exists'] = true;
            $mk['disabled'] = ($s['disabled'] ?? 'false');
            break;
          }
        }
      }
    }catch(Exception $e){ $mk['detail'] = $e->getMessage(); }

    // Active: query only this subscriber instead of loading all active sessions.
    try{
      $ac = ($pppUser !== '') ? $mt('/ppp/active/print', ['?name'=>$pppUser]) : [];
      if(is_array($ac)){
        foreach($ac as $a){
          if(($a['name'] ?? '') === $pppUser){
            $mk['active'] = true;
            break;
          }
        }
      }
    }catch(Exception $e){}

    if(function_exists('mt_api_disconnect')) @mt_api_disconnect($api);
  }

  // Decide color/label
  if(!$mk['api_ok']){
    $mk['color'] = 'gray';
    $mk['label'] = 'فشل اتصال API';
  } else if(!$pppUser){
    $mk['color'] = 'gray';
    $mk['label'] = 'لا يوجد PPP Username';
  } else if(!$mk['exists']){
    $mk['color'] = 'yellow';
    $mk['label'] = 'غير موجود على MikroTik';
  } else {
    $disabled = (string)$mk['disabled'];
    $isDisabled = ($disabled === 'true' || $disabled === 'yes' || $disabled === '1');
    if($isDisabled){
      $mk['color'] = 'red';
      $mk['label'] = 'موقوف (Disabled)';
    } else if($mk['active']){
      $mk['color'] = 'green';
      $mk['label'] = 'نشط ويسحب إنترنت';
    } else {
      $mk['color'] = 'blue';
      $mk['label'] = 'موجود لكنه غير متصل';
    }
  }
}

function dot_html($color){
  $allowed = ['green','blue','red','yellow','gray'];
  $color = in_array((string)$color, $allowed, true) ? (string)$color : 'gray';
  return '<span class="sv-dot sv-dot-'.h($color).'"></span>';
}
?>

<div class="content-wrapper ua-extracted-page ua-subscriber-child-page ua-sub-child-view">
  <section class="content">
    <div class="ua-page-v2">
      <header class="ua-page-head">
        <div class="ua-page-title">
          <h1>تفاصيل مشترك</h1>
          <p>عرض بيانات الحساب والفواتير وحالة MikroTik بدون مغادرة نافذة المشترك.</p>
        </div>
        <div class="ua-page-actions">
          <a class="btn btn-outline-secondary" href="<?= ($sub['is_deleted'] ? 'subscribers_archive.php' : 'subscribers.php') ?>"><i class="fa fa-arrow-right"></i> رجوع</a>
          <a class="btn btn-outline-danger" href="<?= ($sub['is_deleted'] ? 'subscribers_archive.php' : 'subscribers.php') ?>"><i class="fa fa-times"></i> إغلاق</a>
        </div>
      </header>

      <section class="ua-panel-v2">
        <div class="ua-panel-body d-flex justify-content-between align-items-center flex-wrap gap-2">
          <div class="ua-child-summary">
            <strong><?= h($sub['full_name'] ?? '-') ?></strong>
            <small>
              ID: <?= (int)$sub['id'] ?> |
              الحالة: <b><?= h($sub['status'] ?? '-') ?></b> |
              <?= $sub['is_deleted'] ? '<span class="badge bg-warning text-dark">مؤرشف</span>' : '<span class="badge bg-success">غير مؤرشف</span>' ?>
            </small>
          </div>
          <div class="ua-page-actions">
            <?php if(!$sub['is_deleted']): ?>
              <a class="btn btn-outline-primary" href="subscribers_edit.php?id=<?= (int)$sub['id'] ?>">تعديل</a>
              <a class="btn btn-outline-danger" href="subscribers_delete.php?id=<?= (int)$sub['id'] ?>" onclick="return confirm('أرشفة المشترك؟');">أرشفة</a>
              <a class="btn btn-danger" href="subscribers_cancel.php?id=<?= (int)$sub['id'] ?>" onclick="return confirm('⚠️ إلغاء اشتراك نهائي؟ سيتم حذفه من MikroTik ثم نقله للأرشيف.');">إلغاء اشتراك</a>
            <?php else: ?>
              <a class="btn btn-success" href="subscribers_restore.php?id=<?= (int)$sub['id'] ?>" onclick="return confirm('استعادة من الأرشيف؟');">استعادة</a>
            <?php endif; ?>
          </div>
        </div>
      </section>

      <nav class="ua-tabs-v2">
        <a class="ua-tab-v2 <?= $tab==='info'?'is-active':'' ?>" href="subscribers_view.php?id=<?= (int)$id ?>&tab=info">البيانات</a>
        <a class="ua-tab-v2 <?= $tab==='identity'?'is-active':'' ?>" href="subscribers_view.php?id=<?= (int)$id ?>&tab=identity">صورة الهوية</a>
        <a class="ua-tab-v2 <?= $tab==='invoices'?'is-active':'' ?>" href="subscribers_view.php?id=<?= (int)$id ?>&tab=invoices">الفواتير</a>
        <a class="ua-tab-v2 <?= $tab==='mikrotik'?'is-active':'' ?>" href="subscribers_view.php?id=<?= (int)$id ?>&tab=mikrotik">MikroTik (Live)</a>
      </nav>

      <?php if($tab==='info'): ?>
        <section class="ua-panel-v2">
          <div class="ua-panel-body">
            <div class="ua-child-metric-grid">
              <div class="ua-child-metric"><b>المستخدم</b><span><?= h($sub['username'] ?? '-') ?></span></div>
              <div class="ua-child-metric"><b>الهاتف</b><span><?= h($sub['phone'] ?? '-') ?></span></div>
              <div class="ua-child-metric"><b>العنوان</b><span><?= h($sub['address_area'] ?? '-') ?></span></div>
              <div class="ua-child-metric"><b>نوع الوثيقة</b><span><?= h($sub['document_type'] ?? 'هوية شخصية') ?></span></div>
              <div class="ua-child-metric"><b>الجنسية</b><span><?= h($sub['nationality'] ?? 'سوري') ?></span></div>
              <div class="ua-child-metric"><b>رقم الوثيقة</b><span><?= h($sub['document_number'] ?? '-') ?></span></div>

              <div class="ua-child-metric"><b>الباقة</b><span><?= h($pkg) ?></span></div>
              <div class="ua-child-metric"><b>السرعة</b><span><?= h($spd) ?></span></div>
              <div class="ua-child-metric"><b>الـ IP</b><span><?= h($sub['ip_address'] ?? '-') ?></span></div>

              <div class="ua-child-metric"><b>PPP Username</b><code><?= h($pppUser ?: '-') ?></code></div>
              <div class="ua-child-metric"><b>PPP Password</b><code><?= h($pppPass ?: '-') ?></code></div>
              <div class="ua-child-metric"><b>PPP Profile</b><code><?= h($pppProf ?: '-') ?></code></div>

              <div class="ua-child-metric"><b>Rate Limit</b><code><?= h($sub['ppp_rate_limit'] ?? '-') ?></code></div>
              <div class="ua-child-metric"><b>Serial</b><code><?= h($serial ?: '-') ?></code></div>
              <div class="ua-child-metric"><b>آخر مزامنة</b><span><?= h($sub['ppp_last_sync'] ?? '-') ?></span></div>

              <div class="ua-child-metric"><b>الحد</b><span><?= h($sub['quota_gb'] ?? '-') ?> GB</span></div>
              <div class="ua-child-metric"><b>المستخدم</b><span><?= h($sub['used_gb'] ?? '-') ?> GB</span></div>
              <div class="ua-child-metric"><b>speed_state</b><code><?= h($sub['speed_state'] ?? '-') ?></code></div>
            </div>
            <div class="ua-child-note mt-3"><b>ملاحظات:</b><br><?= nl2br(h($sub['notes'] ?? '')) ?></div>
          </div>
        </section>
      <?php elseif($tab==='identity'): ?>
        <section class="ua-panel-v2">
          <div class="ua-panel-body">
            <?php if($sameIdImage): ?>
              <div class="sv-id-grid sv-id-grid-single">
                <article class="sv-id-card">
                  <div class="sv-id-card-head">
                    <strong>الوجهين معاً</strong>
                    <?php if(!$idFront['exists']): ?><span>الملف غير موجود</span><?php endif; ?>
                  </div>
                  <?php if($idFront['is_image']): ?>
                    <a href="<?= h($idFront['url']) ?>" target="_blank" rel="noopener"><img src="<?= h($idFront['url']) ?>" alt="صورة الهوية - الوجهين معاً"></a>
                  <?php elseif($idFront['is_pdf']): ?>
                    <a class="sv-id-file" href="<?= h($idFront['url']) ?>" target="_blank" rel="noopener"><i class="fa fa-file-pdf-o"></i> فتح ملف الهوية PDF</a>
                  <?php else: ?>
                    <div class="sv-id-empty">نوع الملف غير قابل للمعاينة</div>
                  <?php endif; ?>
                </article>
              </div>
            <?php elseif($idFront['url'] || $idBack['url'] || $idPdf['url']): ?>
              <div class="sv-id-grid">
                <?php foreach ([['الوجه الأمامي',$idFront,'صورة الهوية - الوجه الأمامي'], ['الوجه الخلفي',$idBack,'صورة الهوية - الوجه الخلفي']] as $card): ?>
                  <article class="sv-id-card">
                    <div class="sv-id-card-head">
                      <strong><?= h($card[0]) ?></strong>
                      <?php if($card[1]['url'] && !$card[1]['exists']): ?><span>الملف غير موجود</span><?php endif; ?>
                    </div>
                    <?php if(!$card[1]['url']): ?>
                      <div class="sv-id-empty">لا توجد صورة محفوظة</div>
                    <?php elseif($card[1]['is_image']): ?>
                      <a href="<?= h($card[1]['url']) ?>" target="_blank" rel="noopener"><img src="<?= h($card[1]['url']) ?>" alt="<?= h($card[2]) ?>"></a>
                    <?php elseif($card[1]['is_pdf']): ?>
                      <a class="sv-id-file" href="<?= h($card[1]['url']) ?>" target="_blank" rel="noopener"><i class="fa fa-file-pdf-o"></i> فتح الملف</a>
                    <?php else: ?>
                      <div class="sv-id-empty">نوع الملف غير قابل للمعاينة</div>
                    <?php endif; ?>
                  </article>
                <?php endforeach; ?>
                <?php if($idPdf['url']): ?>
                  <article class="sv-id-card">
                    <div class="sv-id-card-head"><strong>ملف هوية PDF</strong><?php if(!$idPdf['exists']): ?><span>الملف غير موجود</span><?php endif; ?></div>
                    <a class="sv-id-file" href="<?= h($idPdf['url']) ?>" target="_blank" rel="noopener"><i class="fa fa-file-pdf-o"></i> فتح ملف الهوية</a>
                  </article>
                <?php endif; ?>
              </div>
            <?php else: ?>
              <div class="ua-child-note"><b>صورة الهوية:</b><br>لا توجد صورة هوية محفوظة لهذا المشترك.</div>
            <?php endif; ?>
          </div>
        </section>
      <?php elseif($tab==='invoices'): ?>
        <section class="ua-panel-v2">
          <div class="ua-panel-body">
            <?php
              $inv = $conn->query("SELECT * FROM invoices WHERE subscriber_id=".(int)$id." ORDER BY id DESC LIMIT 50");
            ?>
            <div class="ua-table-wrap">
            <table class="ua-table">
              <thead><tr>
                <th>#</th><th>الشهر</th><th>النوع</th><th>المبلغ</th><th>الحالة</th><th>مدفوع</th><th>تاريخ</th>
              </tr></thead>
              <tbody>
                <?php if($inv && $inv->num_rows): while($i=$inv->fetch_assoc()): ?>
                  <tr>
                    <td><?= (int)$i['id'] ?></td>
                    <td><?= h($i['cycle_month'] ?? '-') ?></td>
                    <td><?= h($i['invoice_type'] ?? '-') ?></td>
                    <td><?= h($i['amount'] ?? '0.00') ?></td>
                    <td><?= h($i['status'] ?? '-') ?></td>
                    <td><?= h($i['paid_amount'] ?? '0.00') ?></td>
                    <td><?= h($i['created_at'] ?? '-') ?></td>
                  </tr>
                <?php endwhile; else: ?>
                  <tr><td colspan="10" class="text-center">لا توجد فواتير</td></tr>
                <?php endif; ?>
              </tbody>
            </table>
            </div>
          </div>
        </section>
      <?php else: ?>
        <section class="ua-panel-v2">
          <div class="ua-panel-body">
            <div class="ua-alert">
              <?= dot_html($mk['color']) ?><b><?= h($mk['label']) ?></b>
              <?php if($mk['router']): ?> | الراوتر: <b><?=h($mk['router'])?></b><?php endif; ?>
            </div>

            <div class="ua-child-metric-grid mt-3">
              <div class="ua-child-metric"><b>PPP Username</b><code><?= h($pppUser ?: '-') ?></code></div>
              <div class="ua-child-metric"><b>PPP Profile</b><code><?= h($pppProf ?: '-') ?></code></div>
              <div class="ua-child-metric"><b>Comment Serial</b><code><?= h($serial ?: '-') ?></code></div>

              <div class="ua-child-metric"><b>موجود كـ Secret</b><span><?= $mk['exists'] ? 'نعم' : 'لا' ?></span></div>
              <div class="ua-child-metric"><b>Disabled</b><span><?= $mk['disabled']===null ? '-' : h((string)$mk['disabled']) ?></span></div>
              <div class="ua-child-metric"><b>متصل Active</b><span><?= $mk['active'] ? 'نعم' : 'لا' ?></span></div>
            </div>

            <div class="ua-form-actions">
              <a class="btn btn-primary" href="sync_mikrotik.php" onclick="return confirm('مزامنة كل المشتركين مع MikroTik؟');">🔄 تشغيل المزامنة</a>
            </div>
            <div class="ua-child-note mt-2">ملاحظة: إضافة المشترك في البرنامج لا تضيفه إلى MikroTik إلا عبر المزامنة أو منطق الدفع حسب إعداداتك.</div>
          </div>
        </section>
      <?php endif; ?>

    </div>
  </section>
</div>

<?php include __DIR__ . '/footer.php'; ?>
