import ContentstackLivePreview from "@contentstack/live-preview-utils"

import { previewRequest } from "@/lib/graphql/previewRequest"
import { GetCurrentBlockPage } from "@/lib/graphql/Query/CurrentBlockPage.graphql"

import ContentPage from "@/components/Current/ContentPage"
import LoadingSpinner from "@/components/Current/LoadingSpinner"
import { getLang, setLang } from "@/i18n/serverContext"

import type { PageArgs, PreviewParams } from "@/types/params"
import { LangParams } from "@/types/params"
import type { GetCurrentBlockPageData } from "@/types/requests/currentBlockPage"

export default async function CurrentPreviewPage({
  params,
  searchParams,
}: PageArgs<LangParams, PreviewParams>) {
  setLang(params.lang)

  try {
    ContentstackLivePreview.setConfigFromParams(searchParams)

    if (!searchParams.uri || !searchParams.live_preview) {
      return <LoadingSpinner />
    }

    const response = await previewRequest<GetCurrentBlockPageData>(
      GetCurrentBlockPage,
      { locale: getLang(), url: searchParams.uri }
    )

    if (!response.data?.all_current_blocks_page?.total) {
      console.log("#### DATA ####")
      console.log(response.data)
      console.log("SearchParams URI: ", searchParams.uri)
      throw new Error("Not found")
    }

    return <ContentPage data={response.data} />
  } catch (error) {
    // TODO: throw 500
    console.error("Error in current preview page")
    console.error(error)
    throw new Error("Something went wrong")
  }
}
