{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wall #-}

-- | Main app logic
module Biz.Ibb.Core where

import Alpha
import Biz.Ibb.Influencers
import Data.Proxy
import Miso
import Miso.String
import Servant.API
import Servant.Links

type Routes = Home

type Home = View Action

data Model = Model
  { modelUri :: URI
  , people :: [Person]
  } deriving (Show, Eq)

data Action
  = Nop
  | ChangeRoute URI
  | HandleRoute URI
  deriving (Show, Eq)

home :: Model -> View Action
home m = see m

handlers :: Model -> View Action
handlers = home

notfound :: View Action
notfound = div_ [] [ text "404" ]

goHome :: URI
goHome = linkURI $ safeLink
  (Proxy :: Proxy Routes)
  (Proxy :: Proxy Home)

see :: Model -> View Action
see m = div_ [ class_ "container mt-5" ]
  [ div_ [ class_ "jumbotron" ]
      [ h1_ [ class_ "display-4" ] [ text "Influenced by books" ]
      , p_ [ class_ "lead" ] [ text "Influential people and the books that made them." ]
      , p_ [ class_ "lead" ]
        [ a_ [ href_ "http://eepurl.com/ghBFjv" ]
            [ text "Get new book recommendations from the world's influencers in your email." ]
        ]
      ]
  , div_ [ class_ "card-columns" ] $ seePerson /@ people m
  ]

seePerson :: Person -> View Action
seePerson person = div_ [ class_ "card" ]
  [ div_ [ class_ "card-img" ]
    [ img_ [ class_ "card-img img-fluid", src_ $ ms $ _pic person ]]
  , div_ [ class_ "card-body" ]
    [ h4_ [ class_ "card-title" ] [ text $ ms $ _name person ]
    , h6_ [] [ a_ [ class_ "fab fa-twitter"
                  , href_ $ "https://twitter.com/" <> (ms $ _twitter person) ] []
             , a_ [ class_ "fas fa-globe", href_ $ ms $ _website person ] []
             ]
    , p_ [ class_ "card-text" ]
      [ text $ ms $ _blurb person
      , ul_ [] $ seeBook /@ _books person
      ]
    ]
  ]

seeBook :: Book -> View Action
seeBook book = li_ []
  [ a_ [ class_ "text-dark"
       , href_ $ "https://www.amazon.com/dp/" <> (ms $ _amznref book)
       ]
    [ text $ ms $ _title book ]
  ]