import { Author } from '../graphql/schema/core.gen'
import { capitalize } from './capitalize'
import { translit } from './ru2en'

export const isCyrillic = (s: string): boolean => {
  const cyrillicRegex = /[\u0400-\u04FF]/ // Range for Cyrillic characters

  return cyrillicRegex.test(s)
}

export const translateAuthor = (author: Author, lng: string) =>
  lng === 'en' && isCyrillic(author.name)
    ? capitalize(translit(author.name.replace(/ё/, 'e').replace(/ь/, '')).replace(/-/, ' '), true)
    : author.name

export const authorLetterReduce = (acc, author: Author, lng: string) => {
  let letter = ''
  if (!letter && author && author.name) {
    const name = translateAuthor(author, lng)
      .replace(/[^\dA-zА-я]/, ' ')
      .trim()
    const nameParts = name.trim().split(' ')
    const found = nameParts.filter(Boolean).pop()
    if (found && found.length > 0) {
      letter = found[0].toUpperCase()
    }
  }
  if (/[^ËА-яё]/.test(letter) && lng === 'ru') letter = '@'
  if (/[^A-z]/.test(letter) && lng === 'en') letter = '@'

  if (!acc[letter]) acc[letter] = []
  author.name = translateAuthor(author, lng)
  acc[letter].push(author)

  // Sort authors within each letter group alphabetically by name
  acc[letter].sort((a, b) => a.name.localeCompare(b.name))

  return acc
}
