import { Lang } from "@/constants/languages"

import type { DestinationsData } from "@/types/components/destinationOverviewPage/destinationsList/destinationsData"
import { ApiCountry, Country } from "@/types/enums/country"

/**
 * Sorts destination data based on language preference:
 * - en: alphabetical order
 * - de: Germany first, then alphabetical
 * - da: Denmark first, then alphabetical
 * - no: Norway first, then alphabetical
 * - sv: Sweden first, then alphabetical
 * - fi: Finland first, then alphabetical
 *
 * @param destinations DestinationsData
 * @param language Lang
 * @returns Sorted array of destinations
 */
export function getSortedDestinationsByLanguage(
  destinations: DestinationsData,
  language: Lang
) {
  const destinationsToSort = [...destinations]
  const firstCountryByLanguage: Record<Lang, Country | null> = {
    [Lang.de]: Country.Germany,
    [Lang.da]: Country.Denmark,
    [Lang.no]: Country.Norway,
    [Lang.sv]: Country.Sweden,
    [Lang.fi]: Country.Finland,
    [Lang.en]: null,
  }

  const firstCountry = firstCountryByLanguage[language]

  // If no country is defined for this language, sort alphabetically
  if (!firstCountry) {
    return destinationsToSort.sort((a, b) =>
      a.country.localeCompare(b.country, language)
    )
  }

  // Get the localized name of the first country
  const localizedCountryName = ApiCountry[language][firstCountry]

  return destinationsToSort.sort((a, b) => {
    if (a.country === localizedCountryName) {
      return -1
    }

    if (b.country === localizedCountryName) {
      return 1
    }

    return a.country.localeCompare(b.country, language)
  })
}
