// Device data utilities — Battery and Network status tracking

function getBattery() {
  const [battery, setBattery] = React.useState(null);

  React.useEffect(() => {
    navigator.getBattery?.().then(setBattery).catch(() => {
      // Battery API not available
    });
  }, []);

  return battery;
}

function getNetworkStatus() {
  const [status, setStatus] = React.useState({
    online: navigator.onLine,
    effectiveType: navigator.connection?.effectiveType || "unknown",
  });

  React.useEffect(() => {
    function updateOnlineStatus() {
      setStatus((prev) => ({ ...prev, online: navigator.onLine }));
    }

    function updateConnectionStatus() {
      setStatus((prev) => ({ ...prev, effectiveType: navigator.connection?.effectiveType || "unknown" }));
    }

    window.addEventListener("online", updateOnlineStatus);
    window.addEventListener("offline", updateOnlineStatus);
    if (navigator.connection) {
      navigator.connection.addEventListener("change", updateConnectionStatus);
    }

    return () => {
      window.removeEventListener("online", updateOnlineStatus);
      window.removeEventListener("offline", updateOnlineStatus);
      if (navigator.connection) {
        navigator.connection.removeEventListener("change", updateConnectionStatus);
      }
    };
  }, []);

  return status;
}

// Global battery tracker — async function that can be called from anywhere
(function initGlobalBattery() {
  let cachedBattery = null;
  let lastCacheTime = 0;
  const CACHE_DURATION = 500; // Cache for 500ms

  // Export global getBattery function
  window.getBattery = async function() {
    const now = Date.now();
    if (cachedBattery && (now - lastCacheTime) < CACHE_DURATION) {
      return cachedBattery;
    }

    try {
      if (navigator.getBattery) {
        cachedBattery = await navigator.getBattery();
        lastCacheTime = now;
      } else if (navigator.battery) {
        cachedBattery = navigator.battery;
        lastCacheTime = now;
      }
    } catch (e) {
      // Battery API not available
    }

    return cachedBattery;
  };
})();
