{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE DeriveGeneric         #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Uber.Types.TimeEstimate where

import Data.Aeson
import Data.Aeson.Types
import Data.Text         (Text)
import GHC.Generics      (Generic)
import Uber.Auth
import WebApi

data TimeEstimateParams = TimeEstimateParams
    { start_latitude :: Double
    , start_longitude :: Double
    , product_id :: Maybe Text
    } deriving (Show, Generic)

newtype TimeEstimates = TimeEstimates { times :: [TimeEstimate] }
    deriving (Show, Generic)

data TimeEstimate = TimeEstimate
    { t_product_id   :: Text
    , t_display_name :: Text
    , t_estimate     :: Int
    } deriving (Show, Generic)

instance ToParam 'QueryParam TimeEstimateParams
instance FromJSON TimeEstimates where
instance FromJSON TimeEstimate where
    parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = drop 2 }