{-# LANGUAGE TemplateHaskell #-}

module Taskell.IO.HTTP.GitHub.Column
    ( Column
    , columnToList
    , cardsURL
    ) where

import ClassyPrelude

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

import Taskell.IO.HTTP.Aeson (deriveFromJSON)

import qualified Taskell.Data.List as L (List, create)
import qualified Taskell.Data.Task as T (Task)

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

-- create Aeson code
$(deriveFromJSON ''Column)

-- create lenses
$(makeLenses ''Column)

-- operations
cardsURL :: Lens' Column Text
cardsURL :: (Text -> f Text) -> Column -> f Column
cardsURL = (Text -> f Text) -> Column -> f Column
Lens' Column Text
cards_url

columnToList :: Column -> [T.Task] -> L.List
columnToList :: Column -> [Task] -> List
columnToList Column
ls [Task]
tasks = Text -> Seq Task -> List
L.create (Column
ls Column -> Getting Text Column Text -> Text
forall s a. s -> Getting a s a -> a
^. Getting Text Column Text
Lens' Column Text
name) ([Element (Seq Task)] -> Seq Task
forall seq. IsSequence seq => [Element seq] -> seq
fromList [Element (Seq Task)]
[Task]
tasks)