"use client";

import { useEffect, useRef } from "react";

interface MemberStatusChangedDetail {
  workspaceId?: string | number;
  userId?: string | number;
}

/** Refreshes page-owned member data when the global realtime socket reports a status change. */
export function useMemberStatusRefresh(workspaceId: string | null, refresh: () => void) {
  const refreshRef = useRef(refresh);

  useEffect(() => {
    refreshRef.current = refresh;
  }, [refresh]);

  useEffect(() => {
    if (!workspaceId) return;

    const onStatusChanged = (event: Event) => {
      const detail = (event as CustomEvent<MemberStatusChangedDetail>).detail;
      if (detail?.workspaceId != null && String(detail.workspaceId) !== String(workspaceId)) return;
      refreshRef.current();
    };

    window.addEventListener("connecthub:member-status-changed", onStatusChanged);
    return () => window.removeEventListener("connecthub:member-status-changed", onStatusChanged);
  }, [workspaceId]);
}
