module View.Ad ( renderConsoleAds , renderAds ) where import qualified Data.Maybe as Maybe import Data.Text (Text) import qualified Data.Text as T import Model.Ad (Ad) import qualified Model.Ad as Ad renderConsoleAds :: Text -> [Ad] -> Text renderConsoleAds time ads = let (title, message) = renderAds ads titleWithTime = T.concat [ "\n[" , time , "] " , title ] line = T.map (\_ -> '-') titleWithTime in T.intercalate "\n" [ titleWithTime , line , "" , message ] renderAds :: [Ad] -> (Text, Text) renderAds ads = let titleMessage = renderTitle $ length ads adsMessage = T.intercalate "\n\n" . map renderAd $ ads in (titleMessage, adsMessage) renderTitle :: Int -> Text renderTitle count = T.concat [ T.pack . show $ count , agreement " nouvelle" , agreement " annonce" ] where agreement word = T.concat [ word , if count > 1 then "s" else "" ] renderAd :: Ad -> Text renderAd ad = let price = Maybe.fromMaybe "" . fmap (\p -> T.concat [" - ", p]) . Ad.price $ ad titleLine = T.concat [Ad.name ad, " - ", Ad.location ad, price] in T.intercalate "\n" [titleLine, Ad.url ad]