{-# LANGUAGE TemplateHaskell #-}

module Gitlab.Projects where

import           Data.Yaml
import           Gitlab.Core
import           Lens.Micro.Platform
import           RIO
import           RIO.Time

data GitlabCommitData = GitlabCommitData {
  _authoredDate  :: UTCTime,
  _authorEmail   :: Text,
  _authorName    :: Text,
  _committedDate :: UTCTime,
  _committerName :: Text,
  _commitId      :: Text
} deriving (Eq, Show)

$(makeLenses ''GitlabCommitData)

instance FromJSON GitlabCommitData where
  parseJSON = withObject "GitlabCommitData" $ \v -> GitlabCommitData
    <$> v .: "authored_date"
    <*> v .: "author_email"
    <*> v .: "author_name"
    <*> v .: "committed_date"
    <*> v .: "committer_name"
    <*> v .: "id"

getCommitData :: MonadGitlab env m => Text -> Text -> m GitlabCommitData
getCommitData p r = gitlabRequest
  "GET"
  ("/projects/" <> rParam p <> "/repository/commits/" <> rParam r)
  mempty