// init_session.js
(function(){
  var baseUrl = "https:\/\/calls.magicful.ai";
  var callBase = "tel:+13183741377";
  var existingSid = "123141";
  var telDisplay = "+13183741377";
  var sessionTtl = 172800;
  window.wsPublic = { key: "e3b277de8bf28747315e", cluster: "us2", authEndpoint: baseUrl + '/api/ws_auth.php' };
  window.vaBaseUrl = baseUrl;
  var callLinkId = 'call-link';
  function canonicalTelHref(href){
    if(!href) return '';
    try { href = href.trim(); } catch(e) {}
    var lower = href.toLowerCase();
    if(lower.indexOf('tel:') === 0) {
      href = href.slice(4);
    }
    return href.replace(/[^0-9+]/g, '');
  }
  var callHrefCanonical = canonicalTelHref(callBase);
  function findCallLink(){
    var node = document.getElementById(callLinkId);
    if(node) return node;
    var telLinks = document.querySelectorAll('a[href^="tel:"]');
    for(var i = 0; i < telLinks.length; i++){
      var href = telLinks[i].getAttribute('href') || '';
      if(!href) continue;
      if(href === callBase) return telLinks[i];
      if(canonicalTelHref(href) === callHrefCanonical) return telLinks[i];
    }
    return null;
  }
  var sidPattern = /^[1-9]\d{5}$/;
  var bootstrapPending = false;
  function ready(fn){ if(document.readyState !== 'loading'){ fn(); } else { document.addEventListener('DOMContentLoaded', fn); } }
  function applySid(sid){
    if(!sid) return;
    window.sessionId = sid;
    try { localStorage.setItem('VA_SESSION_ID', sid); } catch(e) {}
    try {
      var cookieStr = 'VA_SESSION_ID=' + sid + ';path=/;max-age=' + sessionTtl + ';SameSite=Lax';
      if (window.location.protocol === 'https:') cookieStr += ';Secure';
      document.cookie = cookieStr;
    } catch(e) {}
    var link = findCallLink();
    if(link) {
      if (!link.dataset.vaReady && !link.hasAttribute('href')) {
        link.setAttribute('href', callBase);
      }
      link.dataset.vaReady = '1';
    }
  }
  ready(function(){
    var link = findCallLink();
    bootstrapSid();
    if (!link) return;
    if(!link.hasAttribute('href')) link.setAttribute('href', callBase);
    link.addEventListener('click', function(ev){
      ev.preventDefault();
      if (link.dataset.vaFetching === '1') return;
      link.dataset.vaFetching = '1';
      var payload = { sid: window.sessionId || existingSid || null };
      fetch(baseUrl + '/api/start_call.php', {
        method: 'POST',
        credentials: 'include',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(payload)
      }).then(function(resp){
        if (!resp.ok) throw new Error('status ' + resp.status);
        return resp.json();
      }).then(function(data){
        if (!data || !data.sid || !data.call_href || !data.extension) throw new Error('bad payload');
        applySid(data.sid);
        window.callExtension = data.extension;
        try { localStorage.setItem('VA_CALL_EXTENSION', data.extension); } catch(e) {}
        if (link) {
          link.setAttribute('href', data.call_href);
          link.dataset.vaDialing = '1';
        }
        window.location.href = data.call_href;
      }).catch(function(err){
        console.warn('VA start_call failed', err);
        window.location.href = callBase;
      }).finally(function(){
        link.dataset.vaFetching = '';
      });
    }, { capture: true });
    if (!window.sessionId) {
      bootstrapSid();
    }
  });
  function bootstrapSid(){
    if (window.sessionId && sidPattern.test(window.sessionId)) return;
    if (bootstrapPending) return;
    var stored = '';
    try { stored = localStorage.getItem('VA_SESSION_ID') || ''; } catch(e) {}
    if (stored && sidPattern.test(stored)) {
      applySid(stored);
      return;
    }
    if (existingSid && sidPattern.test(existingSid)) {
      applySid(existingSid);
      return;
    }
    bootstrapPending = true;
    fetch(baseUrl + '/api/ensure_session.php', {
      method: 'POST',
      credentials: 'include',
      headers: { 'Content-Type': 'application/json' },
      body: '{}'
    }).then(function(resp){
      if (!resp.ok) throw new Error('status ' + resp.status);
      return resp.json();
    }).then(function(data){
      if (!data || !data.sid) throw new Error('bad payload');
      existingSid = data.sid;
      applySid(existingSid);
    }).catch(function(err){
      console.warn('VA ensure_session failed', err);
    }).finally(function(){
      bootstrapPending = false;
    });
  }
})();
