export type SidebarSelection = { kind: "chat" | "search"; id: string };

type WorkspaceSelectionItem = { type: SidebarSelection["kind"]; id: string };

type ResolveSidebarSelectionOptions = {
  initialSelection?: SidebarSelection;
  selectFallback?: boolean;
};

export function resolveSidebarSelectionAfterRefresh(
  current: SidebarSelection | null,
  workspaceItems: WorkspaceSelectionItem[],
  { initialSelection, selectFallback = false }: ResolveSidebarSelectionOptions = {}
): SidebarSelection | null {
  const hasItem = (candidate: SidebarSelection | null | undefined) => {
    if (!candidate) return false;
    return workspaceItems.some((item) => item.type === candidate.kind && item.id === candidate.id);
  };

  if (hasItem(current)) {
    return current;
  }
  if (hasItem(initialSelection)) {
    return initialSelection ?? null;
  }
  if (!selectFallback) {
    return null;
  }
  const first = workspaceItems[0];
  return first ? { kind: first.type, id: first.id } : null;
}
