{-|
Module      : CircleCI.Common.Types
Copyright   : (c) Denis Shevchenko, 2016
License     : MIT
Maintainer  : me@dshevchenko.biz
Stability   : alpha

Common types for work with CircleCI API.
-}

module CircleCI.Common.Types (
      AccountAPIToken (..)
    , Token
    , UserName
    , ProjectName
    , BranchName
    , BuildNumber (..)
    , Email
    , CircleCIResponse
    , ProjectPoint (..)
    , ErrorMessage
) where

import Servant.Client
import Data.Text                ( Text )
import Control.Monad.Reader

-- import CircleCI.Common.Run

-- | CircleCI account API token. List of account API tokens can be found at https://circleci.com/account/api.
newtype AccountAPIToken = AccountAPIToken Token

-- | API token as text, for Servant.
type Token = Text

-- | GitHub user name.
type UserName = Text

-- | GitHub project name.
type ProjectName = Text

-- | GitHub branch name.
type BranchName = Text

-- | Number of project's build on CircleCI.
newtype BuildNumber = BuildNumber Int deriving (Eq, Show)

-- | User email address.
type Email = Text

-- | Response from CircleCI.
type CircleCIResponse a = ReaderT AccountAPIToken IO (Either ServantError a)

-- | GitHub project identifier, composed from user name and project name.
data ProjectPoint = ProjectPoint
    { userName    :: UserName     -- ^ GitHub user name.
    , projectName :: ProjectName  -- ^ GitHub project name.
    }

-- | Message about some problem.
type ErrorMessage = Text