/**
 * Public click listener. Calls window.causewise.track when a visitor clicks
 * a Button or Buttons block that opted in. Does not send page views.
 */
import { installBlockTracking, type Tracker } from "./block-tracking";

function pageWindow(): Window {
  return globalThis as unknown as Window;
}

function editorIsOpen(): boolean {
  try {
    const select = pageWindow().wp?.data?.select;
    return typeof select === "function" && !!select("core/block-editor");
  } catch {
    return false;
  }
}

function getTracker(): Tracker | null {
  const tracker = pageWindow().causewise;
  if (!tracker || typeof tracker.track !== "function") return null;
  return {
    track: (eventName, properties) => {
      if (properties) tracker.track(eventName, properties);
      else tracker.track(eventName);
    },
  };
}

try {
  if (!editorIsOpen()) installBlockTracking(getTracker);
} catch {
  // A missing document or tracker must not affect the button.
}

declare global {
  interface Window {
    causewise?: {
      track: (eventName: string, properties?: Record<string, unknown>) => void;
      version?: string;
    };
    wp?: { data?: { select?: (store: string) => unknown } };
  }
}
