{-# LANGUAGE TemplateHaskell #-}

module Taskell.IO.HTTP.GitHub.Card
    ( MaybeCard(MaybeCard)
    , maybeCardToTask
    , content_url
    ) where

import ClassyPrelude

import Control.Lens (makeLenses, (^.))

import qualified Taskell.Data.Task              as T (Task, new)
import           Taskell.IO.HTTP.Aeson          (deriveFromJSON)
import           Taskell.IO.HTTP.GitHub.Utility (cleanUp)

data MaybeCard = MaybeCard
    { MaybeCard -> Maybe Text
_note        :: Maybe Text
    , MaybeCard -> Maybe Text
_content_url :: Maybe Text
    } deriving (MaybeCard -> MaybeCard -> Bool
(MaybeCard -> MaybeCard -> Bool)
-> (MaybeCard -> MaybeCard -> Bool) -> Eq MaybeCard
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MaybeCard -> MaybeCard -> Bool
$c/= :: MaybeCard -> MaybeCard -> Bool
== :: MaybeCard -> MaybeCard -> Bool
$c== :: MaybeCard -> MaybeCard -> Bool
Eq, Int -> MaybeCard -> ShowS
[MaybeCard] -> ShowS
MaybeCard -> String
(Int -> MaybeCard -> ShowS)
-> (MaybeCard -> String)
-> ([MaybeCard] -> ShowS)
-> Show MaybeCard
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MaybeCard] -> ShowS
$cshowList :: [MaybeCard] -> ShowS
show :: MaybeCard -> String
$cshow :: MaybeCard -> String
showsPrec :: Int -> MaybeCard -> ShowS
$cshowsPrec :: Int -> MaybeCard -> ShowS
Show)

-- strip underscores from field labels
$(deriveFromJSON ''MaybeCard)

-- create lenses
$(makeLenses ''MaybeCard)

-- operations
maybeCardToTask :: MaybeCard -> Maybe T.Task
maybeCardToTask :: MaybeCard -> Maybe Task
maybeCardToTask MaybeCard
card = Text -> Task
T.new (Text -> Task) -> (Text -> Text) -> Text -> Task
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Text
cleanUp (Text -> Task) -> Maybe Text -> Maybe Task
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> MaybeCard
card MaybeCard
-> Getting (Maybe Text) MaybeCard (Maybe Text) -> Maybe Text
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Text) MaybeCard (Maybe Text)
Lens' MaybeCard (Maybe Text)
note