import type { Router, RouteRecordRaw } from 'vue-router'

/**
 * Array of routes generated by vue-router file based routing
 */
export declare const routes: RouteRecordRaw[]

/**
 * Setups hot module replacement for routes.
 *
 * @param router - The router instance
 * @param hotUpdateCallback - Callback to be called after replacing the routes and before the navigation
 *
 * @example
 *
 * ```ts
 * import { createRouter, createWebHistory } from 'vue-router'
 * import { routes, handleHotUpdate } from 'vue-router/auto-routes'
 * const router = createRouter({
 *   history: createWebHistory(),
 *   routes,
 * })
 * if (import.meta.hot) {
 *   handleHotUpdate(router)
 * }
 * ```
 */
export declare function handleHotUpdate(
  router: Router,
  hotUpdateCallback?: (newRoutes: RouteRecordRaw[]) => void
): void

// The actual `RouteNamedMap` body is generated by the unplugin into the user's
// `routes.d.ts` and wired into `vue-router`'s `TypesConfig` from there, so the
// typed routes work even if this module is never imported (e.g. when only
// `vue-router/auto-resolver` is used). See vuejs/router#2696.
// TODO(v6): rename to `RouteMap` and host the interface directly on `vue-router`.
export interface RouteNamedMap {}

/**
 * Map of route file paths (relative to the project root) to information about
 * the routes they declare. Augmented from the user's generated `routes.d.ts`
 * by the unplugin. Used by the `definePage` macro typing and the
 * `sfc-typed-router` Volar plugin to type `useRoute()` per file.
 *
 * @internal
 */
export interface _RouteFileInfoMap {}

// Make the macros globally available
declare global {
  const definePage: (typeof import('vue-router/experimental'))['definePage']
}
