{-# LANGUAGE OverloadedStrings #-}

module Network.Protocol.MusicBrainz.XML2.Utils (
    nameCreditsToArtistName
  , nameCreditsToArtistSortName
) where

import Control.Applicative ((<|>), liftA2)
import Data.Maybe (catMaybes)
import Data.Text (Text)
import qualified Data.Text as T

import Network.Protocol.MusicBrainz.XML2.Types

nameCreditsToArtistName :: [NameCredit] -> Text
nameCreditsToArtistName = T.concat . map (nameSpan _nameCreditArtistName)

nameCreditsToArtistSortName :: [NameCredit] -> Text
nameCreditsToArtistSortName = T.concat . map (nameSpan (liftA2 (<|>) _nameCreditArtistSortName _nameCreditArtistName))

nameSpan :: (NameCredit -> Maybe Text) -> NameCredit -> Text
nameSpan f = T.concat . catMaybes . liftA2 (:) f (return . _nameCreditJoinPhrase)