"use client";

export interface CodeNavigationTarget {
  repositoryId?: string | null;
  path: string;
  line?: number;
  endLine?: number;
  symbol?: string;
}

const OPEN_CODE_EVENT = "repopilot:open-code";

export function requestCodeNavigation(target: CodeNavigationTarget) {
  if (typeof window === "undefined") {
    return;
  }

  window.dispatchEvent(
    new CustomEvent<CodeNavigationTarget>(OPEN_CODE_EVENT, {
      detail: target,
    }),
  );
}

export function subscribeToCodeNavigation(
  handler: (target: CodeNavigationTarget) => void,
) {
  if (typeof window === "undefined") {
    return () => {};
  }

  const listener = (event: Event) => {
    const detail = (event as CustomEvent<CodeNavigationTarget>).detail;
    if (!detail?.path) {
      return;
    }
    handler(detail);
  };

  window.addEventListener(OPEN_CODE_EVENT, listener);
  return () => {
    window.removeEventListener(OPEN_CODE_EVENT, listener);
  };
}
