<?php
require __DIR__.'/../config.php';
require __DIR__.'/../auth.php';
$AUTH_USER=login_required();
try { db()->query('SELECT 1'); ensure_background_tables(); } catch(Throwable $e) { http_response_code(500); exit('Database/initialization error: '.e($e->getMessage())); }
$view=$_GET['view']??'dashboard';
if($_SERVER['REQUEST_METHOD']==='GET' && !isset($_GET['jobs']) && $view!=='graph_tester') { try { auto_bootstrap_subscriber_sync(); } catch(Throwable $e) { log_event(null,'subscriber_autostart','error',$e->getMessage()); } }
if(!is_admin() && $view==='settings') $view='dashboard';
$allowed=['dashboard','settings','connect','subscribers','comments','automation','utility','campaigns','logs','graph_tester'];
if(!in_array($view,$allowed,true)) $view='dashboard';
$flashes=flashes();
function nav(string $v,string $label,string $icon=''): void { $active=(($_GET['view']??'dashboard')===$v)?'active':''; echo '<a class="nav '.$active.'" href="?view='.e($v).'">'.$icon.'<span>'.e($label).'</span></a>'; }
function head(string $title): void { global $flashes; ?><!doctype html><html lang="ar" dir="rtl"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title><?=e($title)?> - <?=APP_NAME?></title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.rtl.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"><style>body{background:#f6f8fc;font-family:Tahoma,Arial}.sidebar{width:250px;position:fixed;right:0;top:0;bottom:0;background:#fff;border-left:1px solid #e8ebf0;padding:20px}.main{margin-right:250px;padding:25px}.brand{font-weight:800;font-size:22px;color:#4267b2;margin-bottom:30px}.nav{display:flex;gap:10px;align-items:center;padding:11px 12px;border-radius:9px;text-decoration:none;color:#46505c;margin-bottom:5px}.nav.active,.nav:hover{background:#eef4ff;color:#1877f2}.cardx{background:#fff;border:0;border-radius:14px;box-shadow:0 4px 18px #1522380d}.stat{font-size:28px;font-weight:800}.small-muted{color:#7b8490;font-size:13px}.table>:not(caption)>*>*{padding:12px}.badge-soft{background:#eef4ff;color:#1877f2}.code{background:#f3f5f8;padding:10px;border-radius:8px;direction:ltr;text-align:left;word-break:break-all}@media(max-width:900px){.sidebar{width:70px}.sidebar span{display:none}.main{margin-right:70px}.brand{font-size:14px}}</style></head><body><aside class="sidebar"><div class="brand"><i class="bi bi-meta"></i> Mini Suite</div><?php nav('dashboard','Dashboard','<i class="bi bi-speedometer2"></i>'); nav('connect','تسجيل دخول Facebook','<i class="bi bi-facebook"></i>'); nav('subscribers','المشتركين','<i class="bi bi-people"></i>'); nav('comments','التعليقات','<i class="bi bi-chat-dots"></i>'); nav('automation','الرد التلقائي','<i class="bi bi-magic"></i>'); nav('utility','Utility Messages','<i class="bi bi-lightning-charge"></i>'); nav('campaigns','الحملات','<i class="bi bi-send"></i>'); if(is_admin()) nav('settings','إعدادات التطبيق','<i class="bi bi-gear"></i>'); nav('logs','السجل','<i class="bi bi-journal-text"></i>'); nav('graph_tester','Graph API Tester','<i class="bi bi-terminal"></i>'); echo '<div style="border-top:1px solid #e8ebf0;margin:14px 0 10px;padding-top:12px"></div>'; echo '<a class="nav" href="../account.php"><i class="bi bi-person-circle"></i><span>حسابي / تغيير كلمة المرور</span></a>'; if(is_admin()) echo '<a class="nav admin-link" href="../admin.php"><i class="bi bi-people-fill"></i><span>إدارة المستخدمين</span></a>'; echo '<a class="nav" href="../logout.php"><i class="bi bi-box-arrow-right"></i><span>تسجيل الخروج</span></a>'; ?></aside><main class="main"><div class="d-flex justify-content-between align-items-center mb-4"><div><h3 class="mb-1"><?=e($title)?></h3><div class="small-muted">نظام مستقل لإدارة صفحات Facebook — <?=e($AUTH_USER['email'])?> <a href="../account.php" class="ms-2">حسابي / تغيير كلمة المرور</a> <a href="../logout.php" class="ms-2">خروج</a><?php if(is_admin()): ?> <a href="../admin.php" class="ms-2 fw-bold">إدارة المستخدمين</a><?php endif; ?></div></div></div><?php foreach($flashes as $f): ?><div class="alert alert-<?=e($f[0])?>"><?=e($f[1])?></div><?php endforeach; ?><?php }
function foot(): void { global $view; if($view==='dashboard'){ echo '<script>function refreshJobs(){var panel=document.getElementById("dashboardActivity");if(!panel)return;fetch("?view=dashboard&jobs=1",{cache:"no-store"}).then(r=>r.text()).then(t=>{if(t.trim())panel.innerHTML=t;}).catch(()=>{});} setInterval(refreshJobs,10000);</script>'; } echo '</main></body></html>'; }
function render_pagination(int $total, int $perPage, int $current, string $pageParam='p', array $extra=[]): void {
  $pages=max(1,(int)ceil($total/max(1,$perPage))); if($pages<=1)return;
  $current=max(1,min($pages,$current));
  $window=[]; $window[]=1; for($i=max(2,$current-2);$i<=min($pages-1,$current+2);$i++)$window[]=$i; if($pages>1)$window[]=$pages;
  $window=array_values(array_unique($window)); sort($window);
  echo '<nav class="mt-3" aria-label="Pagination"><ul class="pagination pagination-sm justify-content-center flex-wrap gap-1">';
  $last=0; foreach($window as $i){ if($last && $i>$last+1)echo '<li class="page-item disabled"><span class="page-link">…</span></li>';
    $params=$extra; $params[$pageParam]=$i; $qs=http_build_query($params);
    echo '<li class="page-item '.($i===$current?'active':'').'"><a class="page-link" href="?'.e($qs).'">'.$i.'</a></li>'; $last=$i; }
  echo '</ul><div class="text-center small-muted">صفحة '.$current.' من '.$pages.' — إجمالي '.$total.'</div></nav>';
}

function page_ids_from_selector($value, array $pages): array {
  if($value==='all') return array_values(array_map(fn($x)=>(int)$x['id'],$pages));
  $id=(int)$value; return $id>0 ? [$id] : [];
}
function page_label($value, array $pages): string {
  if($value==='all') return 'كل الصفحات';
  foreach($pages as $p) if((int)$p['id']===(int)$value) return $p['name'];
  return '-';
}


if($_SERVER['REQUEST_METHOD']==='POST' && ($_POST['action']??'')==='sync_all_reviews'){
  verify_csrf();
  $count=0;$pagesOk=0;$errors=0;$empty=0;$details=[];
  foreach(tenant_pages() as $p){
    $pageCount=0;$after=null;$pageError='';
    for($pass=0;$pass<20;$pass++){
      $params=['limit'=>100,'fields'=>'id,name,language,status,category,components'];
      if($after) $params['after']=$after;
      $r=graph('GET',$p['page_id'].'/message_templates',$p['access_token'],$params);
      if(!$r['ok']){
        $errors++; $pageError=$r['error']??'Graph API error';
        log_event((int)$p['id'],'template_review_sync','error',$pageError,['page_id'=>$p['page_id'],'http_status'=>$r['status']??null,'graph_response'=>$r['data']??null]);
        break;
      }
      $items=$r['data']['data']??[];
      foreach($items as $t){
        $raw=$t?json_encode($t,JSON_UNESCAPED_UNICODE):'';
        $name=(string)($t['name']??'');
        if($name==='') continue;
        $lang=(string)($t['language']??($t['language_code']??'en_US'));
        $status=(string)($t['status']??'');
        $metaId=$t['id']??($t['template_id']??null);
        $body=$t['body']['text']??($t['body_text']??'');$header=$t['header']['text']??($t['header_text']??'');$headerType='TEXT';$imageHandle=null;$btn='';$url='';
        if(isset($t['components']) && is_array($t['components'])) foreach($t['components'] as $component){
          $type=strtoupper((string)($component['type']??''));
          if($type==='HEADER'&&strtoupper((string)($component['format']??'TEXT'))==='IMAGE'){$headerType='IMAGE';$imageHandle=(string)($component['example']['header_handle'][0]??'');}
          if($type==='HEADER'&&$header==='')$header=(string)($component['text']??'');
          if($type==='BODY'&&$body==='')$body=(string)($component['text']??'');
          if($type==='BUTTONS'&&!empty($component['buttons'][0])){$b=$component['buttons'][0];$btn=(string)($b['text']??'');$url=(string)($b['url']??'');}
        }
        $btn=$btn?:($t['button']['text']??($t['button_text']??''));$url=$url?:($t['button']['url']??($t['button_url']??''));
        $q=db()->prepare('INSERT INTO utility_templates(user_id,page_id,template_name,language_code,status,raw_json,body_text,header_text,header_type,header_image_handle,button_text,button_url,meta_id,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW()) ON DUPLICATE KEY UPDATE user_id=VALUES(user_id),status=VALUES(status),raw_json=VALUES(raw_json),body_text=COALESCE(NULLIF(VALUES(body_text),""),body_text),header_text=COALESCE(NULLIF(VALUES(header_text),""),header_text),header_type=VALUES(header_type),header_image_handle=COALESCE(NULLIF(VALUES(header_image_handle),""),header_image_handle),button_text=VALUES(button_text),button_url=VALUES(button_url),meta_id=COALESCE(VALUES(meta_id),meta_id),updated_at=NOW()');
        $q->execute([auth_user_id(),$p['id'],$name,$lang,$status,$raw,$body,$header,$headerType,$imageHandle,$btn,$url,$metaId]);$count++;$pageCount++;
      }
      $after=$r['data']['paging']['cursors']['after']??null;
      if(!$after || empty($r['data']['paging']['next'])) break;
    }
    if($pageError!=='') $details[]=e($p['name']).': '.e($pageError);
    elseif($pageCount===0){$empty++;$details[]=e($p['name']).': لم تُرجع Meta أي قوالب من endpoint.';}
    else {$pagesOk++;$details[]=e($p['name']).': تم استيراد/تحديث '.$pageCount.' قالب.';}
  }
  $msg='تمت مزامنة '.$count.' قالب من Meta على '.$pagesOk.' صفحة.';
  if($empty) $msg.=' '.$empty.' صفحة أعادت 0 قوالب؛ هذا لا يعني أن القوالب حُذفت من Meta.';
  if($errors) $msg.=' تعذر الوصول إلى '.$errors.' صفحة؛ راجع تفاصيل السجل.';
  flash($errors?'warning':'success',$msg.' '.implode(' | ',$details));
  redirect('?view=campaigns');
}

if($view==='graph_tester'){
  $pages=all_pages();
  $result=null;
  $selectedPageId=(int)($_POST['saved_page_id']??$_GET['page_id']??0);
  if($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['tester_submit'])){
    verify_csrf();
    $method=strtoupper(trim((string)($_POST['method']??'GET')));
    $path=trim((string)($_POST['path']??''));
    $token='';
    $paramsText=trim((string)($_POST['params']??''));
    {
      $pg=page($selectedPageId);
      if(!$pg) $result=['ok'=>false,'status'=>0,'error'=>'الصفحة المحفوظة غير موجودة.'];
      else $token=(string)$pg['access_token'];
    }
    if(!$result && !in_array($method,['GET','POST','DELETE'],true)) $result=['ok'=>false,'status'=>0,'error'=>'Method غير مسموح. استخدم GET أو POST أو DELETE.'];
    if(!$result && ($path==='' || preg_match('~^https?://|^//|[\r\n]~i',$path))) $result=['ok'=>false,'status'=>0,'error'=>'اكتب Graph API path فقط مثل 1329052833615805 أو 132.../feed.'];
    $params=[];
    if(!$result && $paramsText!==''){
      $decoded=json_decode($paramsText,true);
      if(is_array($decoded)) $params=$decoded;
      else {
        parse_str($paramsText,$params);
        if(!is_array($params)) $result=['ok'=>false,'status'=>0,'error'=>'Parameters يجب أن تكون JSON أو key=value&key2=value2.'];
      }
    }
    if(!$result && $token==='') $result=['ok'=>false,'status'=>0,'error'=>'الصفحة المحددة لا تحتوي على Page Access Token محفوظ. حدّث Page Token من Facebook Accounts أولًا.'];
    if(!$result){
      $path=ltrim($path,'/');
      $url=graph_url($path);
      if($method==='GET' && $params) $url.='?'.http_build_query($params);
      $ch=curl_init($url);
      $headers=['Accept: application/json'];
      if($token) $headers[]='Authorization: Bearer '.$token;
      if($method==='POST'){
        curl_setopt($ch,CURLOPT_POST,true);
        curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($params));
        $headers[]='Content-Type: application/x-www-form-urlencoded';
      }elseif($method==='DELETE') curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'DELETE');
      curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_HTTPHEADER=>$headers,CURLOPT_TIMEOUT=>45,CURLOPT_FOLLOWLOCATION=>true]);
      $raw=curl_exec($ch); $curlErr=curl_error($ch); $status=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE); curl_close($ch);
      $decoded=json_decode((string)$raw,true);
      $result=['ok'=>!$curlErr && $status>=200 && $status<400 && !(isset($decoded['error'])),'status'=>$status,'error'=>$curlErr ?: ($decoded['error']['message']??null),'raw'=>$raw,'json'=>$decoded,'request'=>['method'=>$method,'url'=>$url,'path'=>$path,'params'=>$params]];
    }
  }
  head('Graph API Tester');
  $presets=[
    ['name'=>'بيانات الصفحة','method'=>'GET','path'=>'{PAGE_ID}','params'=>'{"fields":"id,name"}'],
    ['name'=>'منشورات الصفحة','method'=>'GET','path'=>'{PAGE_ID}/feed','params'=>'{"fields":"id,message,created_time","limit":5}'],
    ['name'=>'تعليقات الصفحة','method'=>'GET','path'=>'{PAGE_ID}/feed','params'=>'{"fields":"id,message,comments.limit(10){from,message,id}","limit":5}'],
    ['name'=>'Webhooks subscriptions','method'=>'GET','path'=>'{PAGE_ID}/subscribed_apps','params'=>'{}'],
    ['name'=>'Utility templates','method'=>'GET','path'=>'{PAGE_ID}/message_templates','params'=>'{"limit":25}'],
  ];
  ?>
  <div class="cardx p-4 mb-4">
    <div class="d-flex justify-content-between align-items-center"><div><h5 class="mb-1">🧪 Graph API Tester</h5><div class="small-muted">اختبر Graph API من داخل موقعك مثل أدوات الاختبار، بدون تخزين التوكن الذي تلصقه يدويًا.</div></div><span class="badge bg-primary"><?=e(graph_version())?></span></div>
  </div>
  <div class="cardx p-4 mb-4">
    <h6>طلبات جاهزة</h6><div class="d-flex flex-wrap gap-2 mt-3"><?php foreach($presets as $pr): ?><button type="button" class="btn btn-sm btn-outline-primary preset" data-method="<?=e($pr['method'])?>" data-path="<?=e($pr['path'])?>" data-params='<?=e($pr['params'])?>'><?=e($pr['name'])?></button><?php endforeach; ?></div>
  </div>
  <div class="cardx p-4">
    <form method="post" id="testerForm">
      <input type="hidden" name="csrf" value="<?=csrf()?>"><input type="hidden" name="tester_submit" value="1">
      <div class="row g-3">
        <div class="col-md-2"><label class="form-label">Method</label><select class="form-select" name="method" id="testerMethod"><option>GET</option><option>POST</option><option>DELETE</option></select></div>
        <div class="col-md-10"><label class="form-label">Graph API Path</label><input class="form-control" name="path" id="testerPath" placeholder="1329052833615805 أو PAGE_ID/message_templates" value="<?=e($_POST['path']??'')?>"><div class="small-muted mt-1">اكتب الـPath فقط، بدون https://graph.facebook.com/</div></div>
        <div class="col-12"><label class="form-label">الصفحة</label><select class="form-select" name="saved_page_id" required><option value="0">-- اختر الصفحة --</option><?php foreach($pages as $pg): ?><option value="<?=$pg['id']?>" <?=$selectedPageId===(int)$pg['id']?'selected':''?>><?=e($pg['name'])?> — <?=e($pg['page_id'])?></option><?php endforeach; ?></select><div class="small-muted mt-1">سيستخدم Graph API Tester تلقائيًا Page Access Token المحفوظ لهذه الصفحة. لا حاجة لإدخال التوكن يدويًا.</div></div>
        <div class="col-md-6"><label class="form-label">Parameters</label><textarea class="form-control" name="params" id="testerParams" rows="3" placeholder='{"fields":"id,name"}'><?=e($_POST['params']??'')?></textarea><div class="small-muted mt-1">JSON أو key=value&key2=value2</div></div>
      </div>
      <div class="mt-3 d-flex gap-2"><button class="btn btn-primary" type="submit">▶ تنفيذ الطلب</button><button class="btn btn-outline-secondary" type="button" id="clearTester">مسح</button></div>
    </form>
  </div>
  <?php if($result!==null): ?>
  <div class="cardx p-4 mt-4">
    <div class="d-flex justify-content-between align-items-center mb-3"><h5 class="mb-0">النتيجة</h5><span class="badge bg-<?=$result['ok']?'success':'danger'?>">HTTP <?=e((string)($result['status']??0))?> — <?=$result['ok']?'OK':'ERROR'?></span></div>
    <?php if(!empty($result['error'])): ?><div class="alert alert-danger"><b>Meta / cURL:</b> <?=e((string)$result['error'])?></div><?php endif; ?>
    <?php if(!empty($result['request'])): ?><div class="small-muted mb-2">الطلب: <?=e($result['request']['method'].' '.$result['request']['url'])?></div><?php endif; ?>
    <pre class="code" style="white-space:pre-wrap;max-height:520px;overflow:auto"><?=e(json_encode($result['json']??json_decode((string)($result['raw']??''),true),JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES) ?: (string)($result['raw']??''))?></pre>
  </div>
  <?php endif; ?>
  <script>
  (function(){
    const path=document.getElementById('testerPath'), params=document.getElementById('testerParams'), method=document.getElementById('testerMethod');
    document.querySelectorAll('.preset').forEach(b=>b.addEventListener('click',()=>{method.value=b.dataset.method; path.value=b.dataset.path.replace('{PAGE_ID}', document.querySelector('select[name="saved_page_id"]')?.selectedOptions[0]?.textContent.split('—')[1]?.trim()||'{PAGE_ID}'); params.value=b.dataset.params;}));
    document.getElementById('clearTester')?.addEventListener('click',()=>{path.value='';params.value='';});
  })();
  </script>
  <?php foot(); exit;
}

if($view==='dashboard' && isset($_GET['jobs'])){
  ensure_background_tables();
  $uid=auth_user_id();
  $pdo=db();
  $q=$pdo->prepare("SELECT COUNT(*) FROM subscriber_sync_jobs WHERE user_id=? AND status IN ('queued','running')");$q->execute([$uid]);$subActive=(int)$q->fetchColumn();
  $q=$pdo->prepare("SELECT COUNT(*) FROM comment_bulk_jobs WHERE user_id=? AND status IN ('queued','running')");$q->execute([$uid]);$commentActive=(int)$q->fetchColumn();
  $q=$pdo->prepare("SELECT COUNT(*) FROM campaigns WHERE user_id=? AND status IN ('pending','processing')");$q->execute([$uid]);$campaignActive=(int)$q->fetchColumn();
  $activeTotal=$subActive+$commentActive+$campaignActive;

  $subs=$pdo->prepare("SELECT j.*,p.name page_name FROM subscriber_sync_jobs j JOIN pages p ON p.id=j.page_id AND p.is_active=1 WHERE j.user_id=? ORDER BY FIELD(j.status,'running','queued','paused','failed','completed'),j.updated_at DESC LIMIT 8");
  $subs->execute([$uid]);$subRows=$subs->fetchAll();
  $comments=$pdo->prepare("SELECT j.*,p.name page_name FROM comment_bulk_jobs j JOIN pages p ON p.id=j.page_id AND p.is_active=1 WHERE j.user_id=? ORDER BY FIELD(j.status,'running','queued','paused','failed','completed'),j.updated_at DESC LIMIT 8");
  $comments->execute([$uid]);$commentRows=$comments->fetchAll();
  $camps=$pdo->prepare("SELECT * FROM campaigns WHERE user_id=? ORDER BY FIELD(status,'processing','pending','paused','failed','completed'),updated_at DESC LIMIT 8");
  $camps->execute([$uid]);$campRows=$camps->fetchAll();
  $tpl=$pdo->prepare("SELECT t.*,p.name page_name FROM utility_templates t JOIN pages p ON p.id=t.page_id AND p.is_active=1 WHERE t.user_id=? ORDER BY CASE UPPER(t.status) WHEN 'PENDING_REVIEW' THEN 0 WHEN 'REJECTED' THEN 1 WHEN 'APPROVED' THEN 2 ELSE 3 END,t.updated_at DESC LIMIT 8");
  $tpl->execute([$uid]);$tplRows=$tpl->fetchAll();
  $logs=$pdo->prepare("SELECT l.*,p.name page_name FROM logs l LEFT JOIN pages p ON p.id=l.page_id AND p.is_active=1 WHERE l.user_id=? ORDER BY l.id DESC LIMIT 12");
  $logs->execute([$uid]);$logRows=$logs->fetchAll();

  if($activeTotal===0 && !$subRows && !$commentRows && !$campRows && !$tplRows && !$logRows){
    echo '<div class="alert alert-secondary mb-0">لا توجد عمليات أو تحديثات حتى الآن.</div>'; exit;
  }
  $badge=function(string $status): string { $s=strtolower($status); return ['processing'=>'primary','running'=>'primary','queued'=>'warning','pending'=>'warning','paused'=>'secondary','failed'=>'danger','completed'=>'success','sent'=>'success','success'=>'success','error'=>'danger','approved'=>'success','pending_review'=>'warning','rejected'=>'danger','submission_failed'=>'danger','draft'=>'secondary'][$s]??'dark'; };
  $label=function(string $status): string { $map=['processing'=>'جاري التنفيذ','running'=>'جاري التنفيذ','queued'=>'في الانتظار','pending'=>'في الانتظار','paused'=>'متوقف مؤقتًا','failed'=>'فشل','completed'=>'مكتمل','sent'=>'تم الإرسال','success'=>'نجح','error'=>'فشل','APPROVED'=>'مقبول','PENDING_REVIEW'=>'قيد المراجعة','REJECTED'=>'مرفوض','SUBMISSION_FAILED'=>'فشل الإرسال إلى Meta','DRAFT'=>'مسودة']; return $map[$status]??($map[strtoupper($status)]??$status); };
  $progress=function(int $done,int $total): string { $pct=$total>0?min(100,max(0,(int)round($done*100/$total))):0; return '<div class="progress" style="height:7px"><div class="progress-bar" role="progressbar" style="width:'.$pct.'%"></div></div><div class="small-muted mt-1">'.$done.' / '.$total.' ('.$pct.'%)</div>'; };
  echo '<div class="row g-3 mb-3">';
  echo '<div class="col-md-3"><div class="cardx p-3"><div class="small-muted">عمليات تعمل الآن</div><div class="stat">'.$activeTotal.'</div><div class="small-muted">مشتركين: '.$subActive.' — تعليقات: '.$commentActive.' — حملات: '.$campaignActive.'</div></div></div>';
  $pendingTpl=0;foreach($tplRows as $t){if(strtoupper((string)$t['status'])==='PENDING_REVIEW')$pendingTpl++;}
  echo '<div class="col-md-3"><div class="cardx p-3"><div class="small-muted">طلبات قيد المراجعة</div><div class="stat">'.$pendingTpl.'</div><div class="small-muted">تحديث حالة القوالب/الطلبات</div></div></div>';
  $sentNow=0;$failedNow=0;foreach($campRows as $c){$sentNow+=(int)$c['sent'];$failedNow+=(int)$c['failed'];}
  echo '<div class="col-md-3"><div class="cardx p-3"><div class="small-muted">إرسال الحملات</div><div class="stat">'.$sentNow.'</div><div class="small-muted">نجح — فشل: '.$failedNow.'</div></div></div>';
  $lastLog=$logRows[0]['created_at']??'—'; echo '<div class="col-md-3"><div class="cardx p-3"><div class="small-muted">آخر تحديث</div><div class="fw-bold mt-2">'.e((string)$lastLog).'</div><div class="small-muted">يتم التحديث تلقائيًا كل 10 ثوانٍ</div></div></div>';
  echo '</div>';

  if($subRows){ echo '<div class="cardx p-3 mb-3"><div class="d-flex justify-content-between align-items-center mb-2"><h6 class="mb-0"><i class="bi bi-people"></i> سحب المشتركين</h6><a href="?view=subscribers" class="btn btn-sm btn-outline-primary">فتح التفاصيل</a></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>الصفحة</th><th>الحالة</th><th>التقدم</th><th>آخر خطأ</th></tr></thead><tbody>'; foreach($subRows as $r){$done=(int)$r['added_count'];$total=max($done,(int)$r['total_scanned']); echo '<tr><td>'.e($r['page_name']).'</td><td><span class="badge bg-'.$badge((string)$r['status']).'">'.e($label((string)$r['status'])).'</span></td><td style="min-width:220px">'.$progress($done,$total).'</td><td class="small-muted">'.e($r['last_error']?:'—').'</td></tr>'; } echo '</tbody></table></div></div>'; }

  if($commentRows){ echo '<div class="cardx p-3 mb-3"><div class="d-flex justify-content-between align-items-center mb-2"><h6 class="mb-0"><i class="bi bi-chat-dots"></i> عمليات التعليقات</h6><a href="?view=comments" class="btn btn-sm btn-outline-primary">فتح التفاصيل</a></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>الصفحة</th><th>الحالة</th><th>تم العثور</th><th>نجح</th><th>فشل</th><th>آخر خطأ</th></tr></thead><tbody>'; foreach($commentRows as $r){ echo '<tr><td>'.e($r['page_name']).'</td><td><span class="badge bg-'.$badge((string)$r['status']).'">'.e($label((string)$r['status'])).'</span></td><td>'.(int)$r['total_found'].'</td><td class="text-success">'.(int)$r['sent_count'].'</td><td class="text-danger">'.(int)$r['failed_count'].'</td><td class="small-muted">'.e($r['last_error']?:'—').'</td></tr>'; } echo '</tbody></table></div></div>'; }

  if($campRows){ echo '<div class="cardx p-3 mb-3"><div class="d-flex justify-content-between align-items-center mb-2"><h6 class="mb-0"><i class="bi bi-send"></i> الحملات والإرسال</h6><a href="?view=campaigns" class="btn btn-sm btn-outline-primary">فتح الحملات</a></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>الحملة</th><th>الحالة</th><th>التقدم</th><th>نجح</th><th>فشل</th></tr></thead><tbody>'; foreach($campRows as $r){ echo '<tr><td>'.e($r['name']).'<div class="small-muted">'.e($r['template_name']).'</div></td><td><span class="badge bg-'.$badge((string)$r['status']).'">'.e($label((string)$r['status'])).'</span></td><td style="min-width:220px">'.$progress((int)$r['sent']+(int)$r['failed'],(int)$r['total']).'</td><td class="text-success">'.(int)$r['sent'].'</td><td class="text-danger">'.(int)$r['failed'].'</td></tr>'; } echo '</tbody></table></div></div>'; }

  if($tplRows){ echo '<div class="cardx p-3 mb-3"><div class="d-flex justify-content-between align-items-center mb-2"><h6 class="mb-0"><i class="bi bi-file-earmark-check"></i> طلبات القوالب والمراجعة</h6><a href="?view=utility" class="btn btn-sm btn-outline-primary">فتح Utility Messages</a></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>الصفحة</th><th>القالب</th><th>الحالة</th><th>آخر تحديث</th></tr></thead><tbody>'; foreach($tplRows as $r){$st=(string)$r['status']; echo '<tr><td>'.e($r['page_name']).'</td><td>'.e($r['template_name']).'<div class="small-muted">'.e($r['language_code']).'</div></td><td><span class="badge bg-'.$badge($st).'">'.e($label($st)).'</span></td><td>'.e((string)$r['updated_at']).'</td></tr>'; } echo '</tbody></table></div></div>'; }

  if($logRows){ echo '<div class="cardx p-3"><div class="d-flex justify-content-between align-items-center mb-2"><h6 class="mb-0"><i class="bi bi-activity"></i> آخر نشاط في المنصة</h6><a href="?view=logs" class="btn btn-sm btn-outline-secondary">السجل الكامل</a></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>الوقت</th><th>الخدمة</th><th>الحالة</th><th>الصفحة</th><th>التفاصيل</th></tr></thead><tbody>'; foreach($logRows as $r){ echo '<tr><td class="small-muted">'.e($r['created_at']).'</td><td>'.e($r['type']).'</td><td><span class="badge bg-'.$badge((string)$r['status']).'">'.e($label((string)$r['status'])).'</span></td><td>'.e($r['page_name']??'—').'</td><td>'.e($r['message']).'</td></tr>'; } echo '</tbody></table></div></div>'; }
  exit;
}

if($view==='dashboard'){
  $uid=auth_user_id();
  $q=db()->prepare('SELECT COUNT(*) FROM pages WHERE user_id=? AND is_active=1');$q->execute([$uid]);$pageCount=(int)$q->fetchColumn();
  $q=db()->prepare('SELECT COUNT(*) FROM fb_accounts WHERE user_id=?');$q->execute([$uid]);$accountCount=(int)$q->fetchColumn();
  $q=db()->prepare('SELECT COUNT(*) FROM subscribers WHERE user_id=? AND is_active=1');$q->execute([$uid]);$subscriberCount=(int)$q->fetchColumn();
  $q=db()->prepare('SELECT COUNT(*) FROM automation_rules WHERE user_id=? AND enabled=1');$q->execute([$uid]);$rules=(int)$q->fetchColumn();
  $q=db()->prepare('SELECT COUNT(*) FROM logs WHERE user_id=?');$q->execute([$uid]);$logs=(int)$q->fetchColumn();
  $q=db()->prepare("SELECT COUNT(*) FROM campaign_items WHERE user_id=? AND status='sent'");$q->execute([$uid]);$sent=(int)$q->fetchColumn();
  head('Dashboard'); ?>
  <div class="row g-3">
    <div class="col-md-2"><div class="cardx p-4"><div class="small-muted">حسابات Facebook</div><div class="stat"><?=$accountCount?></div></div></div>
    <div class="col-md-2"><div class="cardx p-4"><div class="small-muted">الصفحات</div><div class="stat"><?=$pageCount?></div></div></div>
    <div class="col-md-2"><div class="cardx p-4"><div class="small-muted">المشتركون</div><div class="stat"><?=$subscriberCount?></div></div></div>
    <div class="col-md-2"><div class="cardx p-4"><div class="small-muted">قواعد الرد</div><div class="stat"><?=$rules?></div></div></div>
    <div class="col-md-2"><div class="cardx p-4"><div class="small-muted">تم الإرسال</div><div class="stat"><?=$sent?></div></div></div>
    <div class="col-md-2"><div class="cardx p-4"><div class="small-muted">السجل</div><div class="stat"><?=$logs?></div></div></div>
  </div>
  <div id="dashboardActivity" class="mt-4"><div class="cardx p-4"><div class="d-flex align-items-center gap-2"><div class="spinner-border spinner-border-sm text-primary" role="status"></div><span>جاري تحميل حالة العمليات والأنشطة...</span></div></div></div>
  <?php foot(); exit;
}

if($view==='settings'){
  if($_SERVER['REQUEST_METHOD']==='POST'){
    verify_csrf();
    $keys=['app_id','app_secret','graph_version','scopes','verify_token','app_name','app_domains','support_email','privacy_policy_url','terms_url','data_deletion_url','data_deletion_callback_url'];
    foreach($keys as $k) save_setting($k,trim((string)($_POST[$k]??'')));
    $scopes=array_filter(array_map('trim',preg_split('/[,\s]+/',trim((string)($_POST['scopes']??'')))));
    foreach(['pages_show_list','pages_read_engagement','pages_manage_engagement','pages_messaging','pages_utility_messaging','pages_manage_metadata','business_management'] as $required){ if(!in_array($required,$scopes,true)) $scopes[]=$required; }
    save_setting('scopes',implode(',',$scopes));
    flash('success','تم حفظ إعدادات Meta وبيانات المراجعة والروابط العامة.');
    redirect('?view=settings');
  }
  head('إعدادات التطبيق');
  $s=settings();
  $s['scopes']=oauth_scopes();
  $appName=$s['app_name']??APP_NAME;
  $domain=$s['app_domains']??(parse_url(app_base_url(),PHP_URL_HOST)?:'');
  $support=$s['support_email']??'';
  $privacy=$s['privacy_policy_url']??(app_base_url().'/privacy-policy.php');
  $terms=$s['terms_url']??(app_base_url().'/terms-of-service.php');
  $deletion=$s['data_deletion_url']??(app_base_url().'/data-deletion.php');
  $deletionCb=$s['data_deletion_callback_url']??(app_base_url().'/data-deletion.php');
  $oauthUrl=app_base_url().'/oauth.php'; $webhookUrl=app_base_url().'/webhook.php';
  ?>
  <div class="cardx p-4 mb-4">
    <div class="d-flex justify-content-between align-items-center"><div><h5 class="mb-1">إعدادات Meta</h5><div class="small-muted">كل بيانات التطبيق والصلاحيات وروابط App Review في مكان واحد.</div></div><span class="badge bg-success">جاهز للمراجعة</span></div>
    <form method="post" class="mt-3"><input type="hidden" name="csrf" value="<?=csrf()?>">
      <div class="row g-3">
        <div class="col-md-6"><label class="form-label">اسم التطبيق</label><input class="form-control" name="app_name" value="<?=e($appName)?>"></div>
        <div class="col-md-6"><label class="form-label">App ID</label><input class="form-control" name="app_id" value="<?=e($s['app_id']??'')?>"></div>
        <div class="col-md-6"><label class="form-label">App Secret</label><input class="form-control" type="password" name="app_secret" value="<?=e($s['app_secret']??'')?>"></div>
        <div class="col-md-3"><label class="form-label">Graph API Version</label><input class="form-control" name="graph_version" value="<?=e($s['graph_version']??DEFAULT_GRAPH_VERSION)?>"></div>
        <div class="col-md-3"><label class="form-label">App Domains</label><input class="form-control" name="app_domains" value="<?=e($domain)?>"></div>
        <div class="col-12"><label class="form-label">Permissions / Scopes</label><textarea class="form-control code" name="scopes" rows="3"><?=e($s['scopes']??DEFAULT_SCOPES)?></textarea><div class="form-text">سيتم إضافة الصلاحيات الأساسية تلقائيًا عند الحفظ، ومنها pages_utility_messaging.</div></div>
        <div class="col-md-6"><label class="form-label">Webhook Verify Token</label><input class="form-control" name="verify_token" value="<?=e($s['verify_token']??'')?>"></div>
        <div class="col-md-6"><label class="form-label">Support / Contact Email</label><input class="form-control" type="email" name="support_email" value="<?=e($support)?>" placeholder="ضع إيميل الدعم الذي تملكه"></div>
      </div>
      <h6 class="mt-4">روابط Meta المطلوبة</h6>
