{-# 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 :: forall (m :: * -> *). MonadIO m => String -> Car m CommandResponse
atr String
w = forall (m :: * -> *) p.
(MonadIO m, Postable p) =>
String -> p -> Car m CommandResponse
runCmd String
"actuate_trunk" [ ByteString
"which_trunk" forall v. FormValue v => ByteString -> v -> FormParam
:= String
w ]

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

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

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