import { headers } from "next/headers"

import { Lang } from "@/constants/languages"

import { auth } from "@/auth"

type CreateContextOptions = {
  auth: typeof auth
  lang: Lang
  pathname: string
  uid?: string | null
  url: string
}

/** Use this helper for:
 * - testing, where we dont have to Mock Next.js' req/res
 * - trpc's `createSSGHelpers` where we don't have req/res
 **/
export function createContextInner(opts: CreateContextOptions) {
  return {
    auth: opts.auth,
    lang: opts.lang,
    pathname: opts.pathname,
    uid: opts.uid,
    url: opts.url,
  }
}

/**
 * This is the actual context you'll use in your router
 * @link https://trpc.io/docs/context
 **/
export function createContext() {
  const h = headers()

  return createContextInner({
    auth,
    lang: h.get("x-lang") as Lang,
    pathname: h.get("x-pathname")!,
    uid: h.get("x-uid"),
    url: h.get("x-url")!,
  })
}

export type Context = ReturnType<typeof createContext>
