{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE TypeApplications #-}

module Tesla.Car.Command.Wake (
  wakeUp
  ) where

import           Control.Lens
import           Control.Monad.IO.Class (MonadIO (..))
import           Data.Aeson
import           Data.Aeson.Lens
import qualified Data.ByteString.Lazy   as BL


import           Tesla.Car              (currentVehicleID, vehicleURL)
import           Tesla.Car.Command
import           Tesla.Internal.HTTP    (jpostAuth)

wakeUp :: MonadIO m => Car m (Maybe Value)
wakeUp :: forall (m :: * -> *). MonadIO m => Car m (Maybe Value)
wakeUp = do
  VehicleID
v <- forall (m :: * -> *). MonadReader CarEnv m => m VehicleID
currentVehicleID
  forall s (m :: * -> *) a.
MonadReader s m =>
Getting (First a) s a -> m (Maybe a)
preview (forall a b. Prism (Maybe a) (Maybe b) a b
_Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall t. AsValue t => Key -> Traversal' t Value
key Key
"response") forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) j a.
(HasTeslaAuth m, FromJSON j, Postable a, MonadIO m) =>
String -> a -> m j
jpostAuth @_ @(Maybe Value) (VehicleID -> String -> String
vehicleURL VehicleID
v String
"wake_up") ByteString
BL.empty