interface ParsedName {
  use?: string
  family?: string
  given?: string[]
  prefix?: string[]
  suffix?: string[]
}

function safeJoin(arr: string[]) {
  return arr?.length > 0 ? arr.join(' ') + ' ' : ''
}

export function joinName(
  names?: ParsedName[],
  use: String[] = ['official'],
): String {
  if (!names || names.length === 0) {
    return 'Nama tidak tersedia'
  }

  const usedName = names.filter((name) => name && use.includes(name.use))[0]

  let name = ''
  name += usedName?.prefix?.length > 0 ? usedName.prefix.join(' ') + ' ' : ''
  name += usedName?.given?.length > 0 ? usedName.given.join(' ') + ' ' : ''
  name += usedName?.family ?? ''
  name += usedName?.suffix?.length > 0 ? ' ' + usedName.suffix.join(' ') : ''

  return name.trim() || usedName?.text || 'Nama tidak tersedia'
}
