module Network.AWS.StorageGateway.UpdateMaintenanceStartTime
    (
    
      updateMaintenanceStartTime
    , UpdateMaintenanceStartTime
    
    , umstGatewayARN
    , umstHourOfDay
    , umstMinuteOfHour
    , umstDayOfWeek
    
    , updateMaintenanceStartTimeResponse
    , UpdateMaintenanceStartTimeResponse
    
    , umstrsGatewayARN
    , umstrsStatus
    ) where
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
import           Network.AWS.StorageGateway.Types
import           Network.AWS.StorageGateway.Types.Product
data UpdateMaintenanceStartTime = UpdateMaintenanceStartTime'
    { _umstGatewayARN   :: !Text
    , _umstHourOfDay    :: !Nat
    , _umstMinuteOfHour :: !Nat
    , _umstDayOfWeek    :: !Nat
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
updateMaintenanceStartTime
    :: Text 
    -> Natural 
    -> Natural 
    -> Natural 
    -> UpdateMaintenanceStartTime
updateMaintenanceStartTime pGatewayARN_ pHourOfDay_ pMinuteOfHour_ pDayOfWeek_ =
    UpdateMaintenanceStartTime'
    { _umstGatewayARN = pGatewayARN_
    , _umstHourOfDay = _Nat # pHourOfDay_
    , _umstMinuteOfHour = _Nat # pMinuteOfHour_
    , _umstDayOfWeek = _Nat # pDayOfWeek_
    }
umstGatewayARN :: Lens' UpdateMaintenanceStartTime Text
umstGatewayARN = lens _umstGatewayARN (\ s a -> s{_umstGatewayARN = a});
umstHourOfDay :: Lens' UpdateMaintenanceStartTime Natural
umstHourOfDay = lens _umstHourOfDay (\ s a -> s{_umstHourOfDay = a}) . _Nat;
umstMinuteOfHour :: Lens' UpdateMaintenanceStartTime Natural
umstMinuteOfHour = lens _umstMinuteOfHour (\ s a -> s{_umstMinuteOfHour = a}) . _Nat;
umstDayOfWeek :: Lens' UpdateMaintenanceStartTime Natural
umstDayOfWeek = lens _umstDayOfWeek (\ s a -> s{_umstDayOfWeek = a}) . _Nat;
instance AWSRequest UpdateMaintenanceStartTime where
        type Rs UpdateMaintenanceStartTime =
             UpdateMaintenanceStartTimeResponse
        request = postJSON storageGateway
        response
          = receiveJSON
              (\ s h x ->
                 UpdateMaintenanceStartTimeResponse' <$>
                   (x .?> "GatewayARN") <*> (pure (fromEnum s)))
instance ToHeaders UpdateMaintenanceStartTime where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("StorageGateway_20130630.UpdateMaintenanceStartTime"
                       :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON UpdateMaintenanceStartTime where
        toJSON UpdateMaintenanceStartTime'{..}
          = object
              (catMaybes
                 [Just ("GatewayARN" .= _umstGatewayARN),
                  Just ("HourOfDay" .= _umstHourOfDay),
                  Just ("MinuteOfHour" .= _umstMinuteOfHour),
                  Just ("DayOfWeek" .= _umstDayOfWeek)])
instance ToPath UpdateMaintenanceStartTime where
        toPath = const "/"
instance ToQuery UpdateMaintenanceStartTime where
        toQuery = const mempty
data UpdateMaintenanceStartTimeResponse = UpdateMaintenanceStartTimeResponse'
    { _umstrsGatewayARN :: !(Maybe Text)
    , _umstrsStatus     :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
updateMaintenanceStartTimeResponse
    :: Int 
    -> UpdateMaintenanceStartTimeResponse
updateMaintenanceStartTimeResponse pStatus_ =
    UpdateMaintenanceStartTimeResponse'
    { _umstrsGatewayARN = Nothing
    , _umstrsStatus = pStatus_
    }
umstrsGatewayARN :: Lens' UpdateMaintenanceStartTimeResponse (Maybe Text)
umstrsGatewayARN = lens _umstrsGatewayARN (\ s a -> s{_umstrsGatewayARN = a});
umstrsStatus :: Lens' UpdateMaintenanceStartTimeResponse Int
umstrsStatus = lens _umstrsStatus (\ s a -> s{_umstrsStatus = a});