import { Outlet, RouterProvider, createRootRoute, createRoute, createRouter } from '@tanstack/react-router';
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { validateRepoSearch } from './lib/repo/search';
import { HomePage } from './routes/home';
import { RepoPage } from './routes/repo';
import './styles.css';

const rootRoute = createRootRoute({ component: Outlet });

const homeRoute = createRoute({ getParentRoute: () => rootRoute, path: '/', component: HomePage });

const repoRoute = createRoute({
  getParentRoute: () => rootRoute,
  path: '$',
  component: RepoPage,
  validateSearch: validateRepoSearch,
});

const router = createRouter({ routeTree: rootRoute.addChildren([homeRoute, repoRoute]) });

declare module '@tanstack/react-router' {
  interface Register {
    router: typeof router;
  }
}

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <RouterProvider router={router} />
  </StrictMode>,
);
