import { DocumentNode } from "graphql"
import { GraphQLClient } from "graphql-request"
import { cache } from "react"

import { env } from "@/env/server"

import { request as _request } from "./_request"

import { Data } from "@/types/request"

const client = new GraphQLClient(env.CMS_URL, {
  fetch: cache(async function (
    url: URL | RequestInfo,
    params: RequestInit | undefined
  ) {
    return fetch(url, params)
  }),
})

export async function request<T>(
  query: string | DocumentNode,
  variables?: {},
  next?: NextFetchRequestConfig
): Promise<Data<T>> {
  return _request(client, query, variables, next)
}
