import { createFileRoute, Link, useNavigate } from "@tanstack/react-router";
import { z } from "zod";
import { exploreRepos } from "~/fns/repos";
import { searchAccounts } from "~/fns/account";
import { searchCode } from "~/fns/code";
import { CodeSearchResults } from "~/components/CodeSearchResults";
import { RepoList } from "~/components/RepoList";
import { SearchForm } from "~/components/SearchForm";
import { Badge } from "~/ui/Badge";
import { Avatar } from "~/ui/Avatar";
import { EmptyState } from "~/ui/EmptyState";
import { PageContainer } from "~/ui/PageContainer";
import { Panel } from "~/ui/Panel";
import { Heading } from "~/ui/Heading";
import { buttonClass } from "~/ui/Button";
import { TextLink } from "~/ui/TextLink";
import { useViewer } from "~/hooks/use-viewer";
import { CodeSearchPager } from "~/components/CodeSearchPager";
import { CODE_MAX_PAGES, CODE_PAGE_SIZE } from "~/lib/code-search";
const MAX_OWNER_CHOICES = 6;
type CodePage = Awaited<ReturnType<typeof searchCode>>;
export const Route = createFileRoute("/search")({
validateSearch: z.object({
q: z.string().optional(),
type: z.enum(["code"]).optional().catch(undefined),
owner: z.string().max(100).optional(),
page: z.coerce.number().int().min(1).max(CODE_MAX_PAGES).optional().catch(undefined),
}),
loaderDeps: ({ search }) => ({
q: search.q?.trim() ?? "",
type: search.type,
owner: search.owner?.trim() || undefined,
page: search.page ?? 1,
}),
loader: async ({ deps }) => {
if (!deps.q) return { q: "", kind: "overview" as const, repos: [], accounts: [] };
if (deps.type === "code" && deps.owner) {
const code = await searchCode({ data: { q: deps.q, owner: deps.owner, page: deps.page } });