/*! akm-presence.js — hotfix 0820d (online class toggle + heartbeat + rescans) */
(function(){
  // Debug via ?akmdebug=1 or localStorage AKM_DEBUG=1
  var AKM_PDBG=false; 
  try{ AKM_PDBG=(location.search.indexOf('akmdebug=1')!==-1)||(localStorage.getItem('AKM_DEBUG')==='1'); }catch(e){}
  function log(){ if(!AKM_PDBG) return; try{ var a=[].slice.call(arguments); a.unshift('[AKM-PRESENCE]'); console.log.apply(console,a);}catch(e){} }

  if(!window.AKMCHAT){ log('AKMCHAT missing'); return; }

  var uid = AKMCHAT.uid || 0;
  var ajax = AKMCHAT.ajax || '/wp-admin/admin-ajax.php';
  var hb   = parseInt(AKMCHAT.presence_hb || '25', 10);
  var TH   = parseInt(AKMCHAT.presence_threshold || '75', 10); // غير مستخدم هنا لكن مُتاح عند الحاجة

  // ---------------- Helpers ----------------
  function ensureDot(img, online){
    if(!img) return;
    // لف الصورة داخل غلاف ليحمل النقطة (حل احتياطي، لا يؤثر على طريقتك بالـ CSS)
    var wrap = img.parentElement;
    if(!wrap || !wrap.classList.contains('akm-avatar-wrap')){
      wrap = document.createElement('span'); 
      wrap.className='akm-avatar-wrap';
      if(img.parentNode){ img.parentNode.insertBefore(wrap, img); wrap.appendChild(img); }
    }
    // عنصر النقطة الاحتياطي
    var dot = wrap.querySelector('.akm-online-dot');
    if(!dot){ dot=document.createElement('i'); dot.className='akm-online-dot'; wrap.appendChild(dot); }
    if(online){ dot.classList.remove('off'); } else { dot.classList.add('off'); }
  }

  // ✅ النقطة وفق CSS الخاص بك: نضيف/نزيل .online على الصورة نفسها
  function setOnlineClassTargets(img, online){
    if(!img) return;

    // على الصورة نفسها (يشمل #akm-head-avatar أو img.akm-chat__thumb)
    if(online){ img.classList.add('online'); } else { img.classList.remove('online'); }

    // على الغلاف إن كان لديه .akm-thumb (بعض القوالب تضع صورة داخل سبان/ديف بهذا الكلاس)
    var p = img.parentElement;
    if(p && p.classList && (p.classList.contains('akm-thumb') || p.classList.contains('akm-chat__thumb'))){
      if(online){ p.classList.add('online'); } else { p.classList.remove('online'); }
    }
  }

  // الهدف: إيجاد كل صور/أغلفة تعود لمعرّف مستخدم معيّن
  function findTargetsForUser(id){
    var sel = [];
    try{
      sel = Array.prototype.slice.call(document.querySelectorAll(
        // صور تحمل data-user مباشرة
        'img.akm-chat__thumb[data-user="'+id+'"], #akm-head-avatar[data-user="'+id+'"], ' +
        // صور داخل عناصر تحمل data-user / data-seller / data-vendor
        '[data-user="'+id+'"] img, [data-seller="'+id+'"] img, [data-vendor="'+id+'"] img, ' +
        // أغلفة قد لا تكون صورًا (span/div) تحمل .akm-chat__thumb مع data-user
        '.akm-chat__thumb[data-user="'+id+'"]'
      ));

      // fallback: داخل صندوق الدردشة
      if(!sel.length){
        var corner = document.getElementById('akm-chat-corner') || document.getElementById('akm-chat-ui');
        if(corner){
          var imgs = corner.querySelectorAll('img.akm-chat__thumb, #akm-head-avatar, .akm-chat__thumb');
          imgs && imgs.forEach(function(im){
            if((im.getAttribute && im.getAttribute('data-user') === id) || 
               (im.dataset && im.dataset.user === id)){
              sel.push(im);
            }
          });
        }
      }
    }catch(e){}
    return sel;
  }

  // ---------------- Core: toggle online ----------------
  function setDotForUser(userId, online){
    var id = String(userId);
    var targets = findTargetsForUser(id);
    if(!targets || !targets.length){ log('no img targets for', id); return; }

    targets.forEach(function(node){
      // إذا كان الهدف صورة
      if(node.tagName && node.tagName.toLowerCase() === 'img'){
        if(!node.getAttribute('data-user')){ node.setAttribute('data-user', id); }
        setOnlineClassTargets(node, !!online); // ✅ كلاس .online طبقًا لـ CSS الخاص بك
        ensureDot(node, !!online);             // حل احتياطي متوافق
      }else{
        // إن كان سبان/ديف غلافًا (غير صورة) ويحمل .akm-chat__thumb
        if(node.classList && node.classList.contains('akm-chat__thumb')){
          if(!node.getAttribute('data-user')){ node.setAttribute('data-user', id); }
          if(online){ node.classList.add('online'); } else { node.classList.remove('online'); }
          // ابحث عن صورة داخله لوضع النقطة الاحتياطية
          var img = node.querySelector('img');
          if(img){ ensureDot(img, !!online); }
        }
      }
    });
  }

  // ---------------- Heartbeat (logged-in only) ----------------
  function hbPing(){
    if(!uid || document.hidden) return; // للمستخدمين المسجلين فقط
    var fd=new FormData(); 
    fd.append('action','akm_presence_ping'); 
    fd.append('nonce', AKMCHAT.nonce||'');
    var x=new XMLHttpRequest(); 
    x.open('POST', ajax, true);
    x.onreadystatechange=function(){ if(x.readyState===4){ log('ping:', x.status); } };
    x.send(fd);
  }
  setTimeout(hbPing, 1000); // أول نبضة بعد التحميل
  setInterval(hbPing, Math.max(10, hb)*1000);
  document.addEventListener('visibilitychange', function(){ if(!document.hidden) hbPing(); });

  // ---------------- Scanner (collect & query online statuses) ----------------
  function collectIds(){
    var ids=[];
    try{
      var nodes = document.querySelectorAll(
        '[data-user],[data-seller],[data-vendor],[data-other-id], #akm-head-avatar[data-user]'
      );
      nodes.forEach(function(el){
        var v = el.getAttribute('data-user')
              || el.getAttribute('data-seller')
              || el.getAttribute('data-vendor')
              || el.getAttribute('data-other-id')
              || '';
        var id = parseInt(v,10);
        if(id && ids.indexOf(id)===-1) ids.push(id);
      });
    }catch(e){}
    return ids;
  }

  var scanTimer = null;
  function scheduleScan(delay){
    clearTimeout(scanTimer);
    scanTimer = setTimeout(scanList, Math.max(0, delay||120));
  }

  function scanList(){
    var ids = collectIds();
    if(!ids.length){ log('no ids yet, rescan later'); return; }
    var fd=new FormData(); 
    fd.append('action','akm_presence_get'); 
    fd.append('ids', ids.join(',')); 
    fd.append('nonce', AKMCHAT.nonce||'');
    var x=new XMLHttpRequest(); 
    x.open('POST', ajax, true);
    x.onreadystatechange=function(){
      if(x.readyState===4){
        try{
          var r=JSON.parse(x.responseText);
          if(r && r.success && r.data && r.data.online){
            Object.keys(r.data.online).forEach(function(k){ 
              setDotForUser(k, r.data.online[k]==1); 
            });
            log('scan ok ids=', ids.length);
          }else{
            log('scan fail payload', x.responseText);
          }
        }catch(e){ log('scan parse err', e && e.message ? e.message : e); }
      }
    };
    x.send(fd);
  }

  // إعادة الفحص عند تغيّر الـ DOM (لما تتحدث القائمة/الهيدر)
  if('MutationObserver' in window){
    var obs = new MutationObserver(function(){ scheduleScan(150); });
    obs.observe(document.documentElement, {childList:true, subtree:true});
  }
  // أول فحص بعد التحميل
  window.addEventListener('load', function(){ scheduleScan(800); });

  // عند فتح محادثة، أعد الفحص سريعًا ليُضبط الأفاتار في الهيدر
  window.addEventListener('akm:openConv', function(){ scheduleScan(300); });

  // واجهة صغيرة اختيارية للضبط اليدوي
  window.AKM_PRESENCE = window.AKM_PRESENCE || {};
  window.AKM_PRESENCE.set = function(userId, online){
    setDotForUser(userId, !!online);
  };

})();
