"use client";

import { useEffect, useState } from "react";
import type { PresenceInfo } from "@/lib/presence";

/**
 * Hält den Präsenzstatus der angegebenen Nutzer aktuell — pollt /api/presence
 * alle 30 s (und bei Rückkehr in den Tab). Startwert kommt vom Server.
 */
export function usePresence(
  ids: string[],
  initial: Record<string, PresenceInfo>,
): Record<string, PresenceInfo> {
  const [map, setMap] = useState(initial);
  const key = [...ids].filter(Boolean).sort().join(",");

  useEffect(() => {
    if (!key) return;
    let alive = true;
    const load = async () => {
      if (document.visibilityState === "hidden") return;
      try {
        const res = await fetch(`/api/presence?ids=${encodeURIComponent(key)}`, { cache: "no-store" });
        if (res.ok && alive) setMap((await res.json()).presence ?? {});
      } catch {
        /* ignore */
      }
    };
    void load();
    const id = setInterval(load, 30_000);
    const onVis = () => document.visibilityState === "visible" && load();
    document.addEventListener("visibilitychange", onVis);
    return () => {
      alive = false;
      clearInterval(id);
      document.removeEventListener("visibilitychange", onVis);
    };
  }, [key]);

  return map;
}
