export const SITE_URL = 'https://queuenorth.com'

// Sitewide search/entity anchor. Referenced by the Organization entity on Home.
export const websiteLd = {
  '@context': 'https://schema.org',
  '@type': 'WebSite',
  '@id': `${SITE_URL}/#website`,
  url: SITE_URL,
  name: 'Queue North Technologies',
  publisher: { '@id': `${SITE_URL}/#organization` },
  inLanguage: 'en-US',
}

const MAX_DESCRIPTION = 158

/**
 * Joins description fragments and trims to what search engines actually display,
 * cutting on a word boundary rather than mid-word.
 * @param {...string} parts
 */
export const clampDescription = (...parts) => {
  const text = parts.filter(Boolean).join(' ').replace(/\s+/g, ' ').trim()
  if (text.length <= MAX_DESCRIPTION) return text

  const cut = text.slice(0, MAX_DESCRIPTION)
  return `${cut.slice(0, cut.lastIndexOf(' ')).replace(/[,;:.]$/, '')}…`
}

/**
 * Builds a BreadcrumbList for a page's position in the site hierarchy.
 * @param {Array<{name: string, path: string}>} trail ordered from the site root
 */
export const buildBreadcrumbLd = (trail) => ({
  '@context': 'https://schema.org',
  '@type': 'BreadcrumbList',
  itemListElement: [
    { name: 'Home', path: '/' },
    ...trail,
  ].map((crumb, index) => ({
    '@type': 'ListItem',
    position: index + 1,
    name: crumb.name,
    item: `${SITE_URL}${crumb.path === '/' ? '' : crumb.path}`,
  })),
})
