import { vi } from "vitest";

type NavigationState = {
  pathname: string;
  params: Record<string, string | string[]>;
  searchParams: URLSearchParams;
};

const defaultState: NavigationState = {
  pathname: "/",
  params: {},
  searchParams: new URLSearchParams(),
};

let state: NavigationState = { ...defaultState };

const createRouter = () => ({
  push: vi.fn(),
  replace: vi.fn(),
  prefetch: vi.fn(),
  back: vi.fn(),
  forward: vi.fn(),
  refresh: vi.fn(),
});

let router = createRouter();

export const __setNavigationState = (partial: Partial<NavigationState>) => {
  state = { ...state, ...partial };
};

export const __resetNavigationState = () => {
  state = { ...defaultState };
  router = createRouter();
};

export const __getRouter = () => router;

export const usePathname = () => state.pathname;
export const useParams = () => state.params;
export const useSearchParams = () => state.searchParams;
export const useRouter = () => router;
