{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell   #-}

module Tesla.Car.Command.Doors (
  actuateFrontTrunk, actuateRearTrunk,
  lockDoors, unlockDoors
  ) where

import           Control.Monad.IO.Class (MonadIO (..))
import           Network.Wreq           (FormParam (..))
import           Tesla.Car.Command

atr :: MonadIO m => String -> Car m CommandResponse
atr :: String -> Car m CommandResponse
atr String
w = String -> [FormParam] -> Car m CommandResponse
forall (m :: * -> *) p.
(MonadIO m, Postable p) =>
String -> p -> Car m CommandResponse
runCmd String
"actuate_trunk" [ ByteString
"which_trunk" ByteString -> String -> FormParam
forall v. FormValue v => ByteString -> v -> FormParam
:= String
w ]

actuateFrontTrunk :: MonadIO m => Car m CommandResponse
actuateFrontTrunk :: Car m CommandResponse
actuateFrontTrunk = String -> Car m CommandResponse
forall (m :: * -> *). MonadIO m => String -> Car m CommandResponse
atr String
"front"

actuateRearTrunk :: MonadIO m => Car m CommandResponse
actuateRearTrunk :: Car m CommandResponse
actuateRearTrunk = String -> Car m CommandResponse
forall (m :: * -> *). MonadIO m => String -> Car m CommandResponse
atr String
"rear"

mkNamedCommands [("lockDoors", "door_lock"),
                 ("unlockDoors", "door_unlock")]