{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}

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

import ClassyPrelude

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

import IO.HTTP.Aeson       (deriveFromJSON)
import IO.HTTP.GitHub.Card (Card, cardToTask)

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

data Column = Column
    { _name      :: Text
    , _cards_url :: Text
    } deriving (Eq, Show)

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

-- create lenses
$(makeLenses ''Column)

-- operations
cardsURL :: Lens' Column Text
cardsURL = cards_url

columnToList :: Column -> [Card] -> L.List
columnToList ls cards = L.create (ls ^. name) (fromList $ cardToTask <$> cards)