module Network.AWS.AutoScaling.DescribeNotificationConfigurations
    (
    
      DescribeNotificationConfigurations
    
    , describeNotificationConfigurations
    
    , dncAutoScalingGroupNames
    , dncMaxRecords
    , dncNextToken
    
    , DescribeNotificationConfigurationsResponse
    
    , describeNotificationConfigurationsResponse
    
    , dncrNextToken
    , dncrNotificationConfigurations
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.Query
import Network.AWS.AutoScaling.Types
import qualified GHC.Exts
data DescribeNotificationConfigurations = DescribeNotificationConfigurations
    { _dncAutoScalingGroupNames :: List "member" Text
    , _dncMaxRecords            :: Maybe Int
    , _dncNextToken             :: Maybe Text
    } deriving (Eq, Ord, Show)
describeNotificationConfigurations :: DescribeNotificationConfigurations
describeNotificationConfigurations = DescribeNotificationConfigurations
    { _dncAutoScalingGroupNames = mempty
    , _dncNextToken             = Nothing
    , _dncMaxRecords            = Nothing
    }
dncAutoScalingGroupNames :: Lens' DescribeNotificationConfigurations [Text]
dncAutoScalingGroupNames =
    lens _dncAutoScalingGroupNames
        (\s a -> s { _dncAutoScalingGroupNames = a })
            . _List
dncMaxRecords :: Lens' DescribeNotificationConfigurations (Maybe Int)
dncMaxRecords = lens _dncMaxRecords (\s a -> s { _dncMaxRecords = a })
dncNextToken :: Lens' DescribeNotificationConfigurations (Maybe Text)
dncNextToken = lens _dncNextToken (\s a -> s { _dncNextToken = a })
data DescribeNotificationConfigurationsResponse = DescribeNotificationConfigurationsResponse
    { _dncrNextToken                  :: Maybe Text
    , _dncrNotificationConfigurations :: List "member" NotificationConfiguration
    } deriving (Eq, Show)
describeNotificationConfigurationsResponse :: DescribeNotificationConfigurationsResponse
describeNotificationConfigurationsResponse = DescribeNotificationConfigurationsResponse
    { _dncrNotificationConfigurations = mempty
    , _dncrNextToken                  = Nothing
    }
dncrNextToken :: Lens' DescribeNotificationConfigurationsResponse (Maybe Text)
dncrNextToken = lens _dncrNextToken (\s a -> s { _dncrNextToken = a })
dncrNotificationConfigurations :: Lens' DescribeNotificationConfigurationsResponse [NotificationConfiguration]
dncrNotificationConfigurations =
    lens _dncrNotificationConfigurations
        (\s a -> s { _dncrNotificationConfigurations = a })
            . _List
instance ToPath DescribeNotificationConfigurations where
    toPath = const "/"
instance ToQuery DescribeNotificationConfigurations where
    toQuery DescribeNotificationConfigurations{..} = mconcat
        [ "AutoScalingGroupNames" =? _dncAutoScalingGroupNames
        , "MaxRecords"            =? _dncMaxRecords
        , "NextToken"             =? _dncNextToken
        ]
instance ToHeaders DescribeNotificationConfigurations
instance AWSRequest DescribeNotificationConfigurations where
    type Sv DescribeNotificationConfigurations = AutoScaling
    type Rs DescribeNotificationConfigurations = DescribeNotificationConfigurationsResponse
    request  = post "DescribeNotificationConfigurations"
    response = xmlResponse
instance FromXML DescribeNotificationConfigurationsResponse where
    parseXML = withElement "DescribeNotificationConfigurationsResult" $ \x -> DescribeNotificationConfigurationsResponse
        <$> x .@? "NextToken"
        <*> x .@? "NotificationConfigurations" .!@ mempty
instance AWSPager DescribeNotificationConfigurations where
    page rq rs
        | stop (rq ^. dncNextToken) = Nothing
        | otherwise = (\x -> rq & dncNextToken ?~ x)
            <$> (rs ^. dncrNextToken)