{-# LANGUAGE OverloadedStrings #-}

module Network.GoDaddy.AftermarketTypes ( AftermarketListingExpiryCreate(AftermarketListingExpiryCreate)
                                        , AftermarketListingAction(AftermarketListingAction)) where

import           Data.Aeson

data AftermarketListingExpiryCreate = AftermarketListingExpiryCreate { domain            :: String
                                                                     , expiresAt         :: String
                                                                     , losingRegistrarId :: Integer
                                                                     , pageViewsMonthly  :: Maybe Integer
                                                                     , revenueMonthly    :: Maybe Integer } deriving (Show)

instance ToJSON AftermarketListingExpiryCreate where
  toJSON (AftermarketListingExpiryCreate d e l p r) =
    object [ "domain" .= d
           , "expiresAt" .= e
           , "losingRegistrarId" .= l
           , "pageViewsMonthly" .= p
           , "revenueMonthly" .= r ]

instance FromJSON AftermarketListingExpiryCreate where
  parseJSON (Object v) =
    AftermarketListingExpiryCreate <$> v .: "domain"
                                   <*> v .: "expiresAt"
                                   <*> v .: "losingRegistrarId"
                                   <*> v .:? "pageViewsMonthly"
                                   <*> v .:? "revenueMonthly"
  parseJSON _ = fail "AftermarketListingExpiryCreate object not found"

data AftermarketListingAction = AftermarketListingAction { listingActionId :: Integer } deriving (Show)

instance ToJSON AftermarketListingAction where
  toJSON (AftermarketListingAction id) =
    object [ "listingActionId" .= id ]

instance FromJSON AftermarketListingAction where
  parseJSON (Object v) =
    AftermarketListingAction <$> v .: "listingActionId"
  parseJSON _ = fail "AftermarketListingAction object not found"