{-# LANGUAGE RecordWildCards            #-} 
{-# LANGUAGE TypeFamilies               #-} 
{-# LANGUAGE MultiParamTypeClasses      #-} 
{-# LANGUAGE OverloadedStrings          #-} 

module Aws.ElasticTranscoder.Commands.ListJobsByStatus
    ( ListJobsByStatus(..)
    , ListJobsByStatusResponse(..)
    ) where

import           Aws.Core
import           Aws.ElasticTranscoder.Core
import           Control.Applicative
import qualified Data.Text                      as T
import qualified Data.ByteString.Char8          as BC

data ListJobsByStatus
    = ListJobsByStatus
        { ljsStatus    :: Status
        , ljsAscending :: Bool
        , ljsPageToken :: TextOrNull
        }
    deriving (Show,Eq)

data ListJobsByStatusResponse
    = ListJobsByStatusResponse
        { ljsrJobs          :: [JobSpecId]
        , ljsrNextPageToken :: TextOrNull 
        }
    deriving (Show,Eq)

instance SignQuery ListJobsByStatus where

    type ServiceConfiguration ListJobsByStatus = EtsConfiguration

    signQuery ListJobsByStatus{..} = etsSignQuery EtsQuery
        { etsqMethod  = Get
        , etsqRequest = "jobsByStatus/" `T.append` status_t ljsStatus
        , etsqQuery   = [("Ascending",text_q $ bool_t ljsAscending)] ++
                        [("pageToken",text_q pgtk) | 
                                            TNText pgtk<-[ljsPageToken] ]
        , etsqBody    = Nothing
        }

instance ResponseConsumer ListJobsByStatus ListJobsByStatusResponse where

    type ResponseMetadata ListJobsByStatusResponse = EtsMetadata

    responseConsumer _ mref = etsResponseConsumer mref $ \rsp ->
                                                    cnv <$> jsonConsumer rsp
          where
            cnv (JobList a b) = ListJobsByStatusResponse a b

instance Transaction ListJobsByStatus ListJobsByStatusResponse

instance AsMemoryResponse ListJobsByStatusResponse where

    type MemoryResponse ListJobsByStatusResponse = ListJobsByStatusResponse

    loadToMemory = return

text_q :: T.Text -> Maybe BC.ByteString
text_q = Just . BC.pack . T.unpack