module AWS.EC2.Utils where

import Control.Applicative
import qualified Data.Text as T

import AWS.EC2.Query (QueryParam(..))
import AWS.EC2.Types
import AWS.EC2.Params
import AWS.Util

blockDeviceMappingParams
    :: [BlockDeviceMappingParam] -> QueryParam
blockDeviceMappingParams =
    StructArrayParams "BlockDeviceMapping" . map kvs
  where
    kvs (BlockDeviceMappingParamEBS name dev src dot vtype) = 
        [ ("Ebs.DeviceName", name)
        , ebsSource src
        ] ++ vtparam vtype ++ (uncurry f =<<
            [ ("Ebs.NoDevice", boolToText <$> dev)
            , ("Ebs.DeleteOnTermination", boolToText <$> dot)
            ])
    kvs (BlockDeviceMappingParamInstanceStore name dev vname) =
        [("Ebs.DeviceName", name)] ++ (uncurry f =<<
            [ ("Ebs.NoDevice", boolToText <$> dev)
            , ("Ebs.VirtualName", vname)
            ])

    ebsSource (EbsSnapshotId sid) = ("Ebs.SnapshotId", sid)
    ebsSource (EbsVolumeSize size) =
        ("Ebs.VolumeSize", T.pack $ show size)

    f n = maybe [] (\a -> [(n, a)])
    vtparam Nothing = []
    vtparam (Just Standard) = [("Ebs.VolumeType", "standard")]
    vtparam (Just (IO1 iops)) =
        [ ("Ebs.VolumeType", "io1")
        , ("Ebs.Iops", T.pack $ show iops)
        ]