import { createORPCClient } from "@orpc/client";
import { RPCLink } from "@orpc/client/fetch";
import { createTanstackQueryUtils } from "@orpc/tanstack-query";
import { QueryCache, QueryClient } from "@tanstack/react-query";
import { toast } from "sonner";
import type { appRouter } from "../../../server/src/routers/index";
import type { RouterClient } from "@orpc/server";

export const queryClient = new QueryClient({
  queryCache: new QueryCache({
    onError: (error) => {
      toast.error(`Error: ${error.message}`, {
        action: {
          label: "retry",
          onClick: () => {
            queryClient.invalidateQueries();
          },
        },
      });
    },
  }),
});

export const link = new RPCLink({
  {{#if (includes frontend "next")}}
  url: `${process.env.NEXT_PUBLIC_SERVER_URL}/rpc`,
  {{else}}
  url: `${import.meta.env.VITE_SERVER_URL}/rpc`,
  {{/if}}
  {{#if auth}}
  fetch(url, options) {
    return fetch(url, {
      ...options,
      credentials: "include",
    });
  },
  {{/if}}
});

export const client: RouterClient<typeof appRouter> = createORPCClient(link)

export const orpc = createTanstackQueryUtils(client)
