aboutsummaryrefslogtreecommitdiff
path: root/src/View/Ad.hs
blob: acf08393cd4d2db892d07565fa8eb3c7c206417e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
{-# LANGUAGE OverloadedStrings #-}

module View.Ad
  ( renderConsoleAds
  , renderAds
  ) where

import Data.List (intersperse)
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import qualified Data.Text as T

import Model.Ad (Ad(..))
import qualified Model.Ad as Ad
import Model.Resume (Resume(..))
import qualified Model.Resume as Resume
import Model.Detail (Detail(..))
import qualified Model.Detail as Detail

renderConsoleAds :: Text -> [Ad] -> Text
renderConsoleAds time ads =
  let (title, message) = renderAds ads
      titleWithTime =
        T.concat
          [ "\n["
          , time
          , "] "
          , title
          ]
      line = T.map (\_ -> '-') title
  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 =
  T.concat
    [ renderResume (Ad.resume ad)
    , "\n\n"
    , renderDetail (Ad.detail ad)
    ]

renderResume :: Resume -> Text
renderResume resume =
  let formatPrice price = T.concat [" - ", price]
      price = fromMaybe "" . fmap formatPrice . Resume.price $ resume
      titleLine = T.concat [Resume.name resume, price]
  in  T.intercalate "\n" [titleLine, Resume.url resume]

renderDetail :: Detail -> Text
renderDetail detail =
  fromMaybe "−" (Detail.description detail)