import { Page } from '@commerce/types/page'
import type { PageAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Page'
import { SpreeSdkResponse } from '../../types'

const normalizePage = (
  _spreeSuccessResponse: SpreeSdkResponse,
  spreePage: PageAttr,
  commerceLocales: string[]
): Page => {
  // If the locale returned by Spree is not available, search
  // for a similar one.

  const spreeLocale = spreePage.attributes.locale
  let usedCommerceLocale: string

  if (commerceLocales.includes(spreeLocale)) {
    usedCommerceLocale = spreeLocale
  } else {
    const genericSpreeLocale = spreeLocale.split('-')[0]

    const foundExactGenericLocale = commerceLocales.includes(genericSpreeLocale)

    if (foundExactGenericLocale) {
      usedCommerceLocale = genericSpreeLocale
    } else {
      const foundSimilarLocale = commerceLocales.find((locale) => {
        return locale.split('-')[0] === genericSpreeLocale
      })

      usedCommerceLocale = foundSimilarLocale || spreeLocale
    }
  }

  return {
    id: spreePage.id,
    name: spreePage.attributes.title,
    url: `/${usedCommerceLocale}/${spreePage.attributes.slug}`,
    body: spreePage.attributes.content,
  }
}

export default normalizePage