{-# LANGUAGE TypeFamilies
           , MultiParamTypeClasses
           , FlexibleInstances
           , OverloadedStrings
           , RecordWildCards
           , TemplateHaskell
           , LambdaCase
           #-}

module Aws.Ec2.Commands.StopInstances where

import Data.Text ()
import Data.ByteString.Char8 (pack)
import qualified Network.HTTP.Types as HTTP
import Data.Monoid
import Aws.Ec2.TH

-- http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-StopInstances.html
data StopInstances = StopInstances
                  { stop_instanceIds :: [Text]
                  } deriving (Show)

instance SignQuery StopInstances where
    type ServiceConfiguration StopInstances = EC2Configuration
    signQuery StopInstances{..} = ec2SignQuery $
                                  main
                                  +++ enumerateInstances (zip [1..] stop_instanceIds)
        where
          main :: HTTP.Query
          main = [ ("Action", qArg "StopInstances")
                 , defVersion
                 ]
          enumerateInstances :: [(Int,Text)] -> HTTP.Query
          enumerateInstances [] = []
          enumerateInstances ((i,x):xs) = [("InstanceId." <> pack (show i), qArg x)] +++ enumerateInstances xs


ec2ValueTransaction ''StopInstances "StopInstancesResponse"