import { gql } from 'graphql-request'
import fetchAPI from '@/lib/api/fetchAPI'
import { nodesFromEdges } from '@/lib/utilities'
import { PRODUCT_PAGE_FRAGMENT } from './fragments'

/**
 * Query a single product page by slug
 */
export async function getProductPageBySlug(slug: string) {
  const data = await fetchAPI(
    gql`
      ${PRODUCT_PAGE_FRAGMENT}
      query ProductPageBySlug($id: ID!) {
        page(id: $id, idType: URI) {
          ...ProductPageFields
        }
      }
    `,
    {
      variables: {
        id: slug,
      },
    }
  )

  return data
}

/**
 * Query a product overview page by slug
 */
export async function getProductOverviewPage(slug: string) {
  const data = await fetchAPI(
    gql`
      query GetProductOverview($id: ID!) {
        page(id: $id, idType: URI) {
          title
          seo {
            fullHead
          }
          featuredImage {
            node {
              alt: altText
              imageUrl: sourceUrl
              placeholder: sourceUrl(size: THUMBNAIL)
            }
          }
          productOverviewContent {
            heroSection {
              fieldGroupName
              heroTitle
              heroText
              subHeroTitle
              subHeroText
            }
            keyFeatureSliders {
              sliderTitle
              sliderText
              sliderButtonLink {
                title
                url
              }
              sliderImages {
                imageSlide {
                  alt: altText
                  imageUrl: sourceUrl
                  placeholder: sourceUrl(size: THUMBNAIL)
                }
                imageCaption
              }
            }
          }
          customCtaSection {
            ctaText
            ctaLink {
              title
              url
            }
            enableCta
          }
        }
      }
    `,
    {
      variables: {
        id: slug,
      },
    }
  )

  return data
}

/**
 * Query all product page slugs
 */
export async function getAllProductPageSlugs() {
  const data = await fetchAPI(
    gql`
      query AllProductPageSlugs {
        pages(first: 1000, where: { parentNotIn: "null" }) {
          edges {
            node {
              slug
            }
          }
        }
      }
    `
  )

  return nodesFromEdges(data?.pages?.edges || [])
}
