{-# LANGUAGE OverloadedStrings #-}

module Tesla.Car.Command.SpeedLimit (
  speedLimit, activateSpeedLimit, deactivateSpeedLimit, clearSpeedLimitPIN
  ) where

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

speedLimit :: MonadIO m => Int -> Car m CommandResponse
speedLimit to = runCmd "speed_limit_set_limit" ["limit_mph" := to ]

speedo :: MonadIO m => String -> Int -> Car m CommandResponse
speedo c pin = runCmd c ["pin" := pin ]

activateSpeedLimit :: MonadIO m => Int -> Car m CommandResponse
activateSpeedLimit = speedo "speed_limit_activate"

deactivateSpeedLimit :: MonadIO m => Int -> Car m CommandResponse
deactivateSpeedLimit = speedo "speed_limit_deactivate"

clearSpeedLimitPIN :: MonadIO m => Int -> Car m CommandResponse
clearSpeedLimitPIN = speedo "speed_limit_clear_pin"