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

/**
 * Query a single project by slug
 */
export async function getProjectBySlug(slug: string) {
  const data = await fetchAPI(
    gql`
      ${PROJECT_FRAGMENT}
      query ProjectBySlug($id: ID!) {
        page: project(id: $id, idType: SLUG) {
          ...ProjectFields
        }

        projects(first: 10000) {
          edges {
            node {
              uri
              id
              title
              featuredImage {
                node {
                  alt: altText
                  imageUrl: sourceUrl
                  placeholder: sourceUrl(size: THUMBNAIL)
                }
              }
              caseStudyProjectContent {
                heroSection {
                  customerName
                  projectType
                }
              }
            }
          }
        }
      }
    `,
    {
      variables: {
        id: slug,
      },
    }
  )

  return data
}

/**
 * Query the case studies page
 */
export async function getProjectsPage() {
  const data = await fetchAPI(
    gql`
      query ProjectsPage {
        page(id: "projects", idType: URI) {
          id
          title
          seo {
            fullHead
          }
          featuredProjectHeroSection {
            featuredProject {
              ... on Project {
                uri
                title
                featuredImage {
                  node {
                    alt: altText
                    imageUrl: sourceUrl
                    placeholder: sourceUrl(size: THUMBNAIL)
                  }
                }
                caseStudyProjectContent {
                  heroSection {
                    customerName
                    projectType
                  }
                }
                terms(where: { orderby: TERM_ORDER }) {
                  edges {
                    node {
                      taxonomyName
                      slug
                      name
                    }
                  }
                }
              }
            }
          }
        }

        projects(first: 10000) {
          edges {
            node {
              slug
              title
              featuredImage {
                node {
                  alt: altText
                  imageUrl: sourceUrl
                  placeholder: sourceUrl(size: THUMBNAIL)
                }
              }
              caseStudyProjectContent {
                heroSection {
                  customerName
                  projectType
                }
              }
              terms(where: { orderby: TERM_ORDER }) {
                edges {
                  node {
                    taxonomyName
                    slug
                    name
                  }
                }
              }
            }
          }
        }
      }
    `
  )

  return data
}

/**
 * Query all project slugs
 */
export async function getAllProjectSlugs() {
  const data = await fetchAPI(
    gql`
      query AllProjectSlugs {
        projects(first: 10000) {
          edges {
            node {
              slug
            }
          }
        }
      }
    `
  )

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