{-# LANGUAGE DataKinds              #-}
{-# LANGUAGE DeriveGeneric          #-}
{-# LANGUAGE FlexibleInstances      #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses  #-}
{-# LANGUAGE OverloadedStrings      #-}
{-# LANGUAGE TemplateHaskell        #-}
{-# LANGUAGE TypeOperators          #-}

module Mollie.API.Methods
    ( getMethod
    , getMethods
    , MethodAPI
    ) where

import qualified Control.Lens        as Lens
import qualified Data.Aeson          as Aeson
import qualified Data.Aeson.TH       as Aeson
import qualified Data.Aeson.Types    as Aeson
import qualified Data.Text           as Text
import           GHC.Generics        (Generic)
import           Mollie.API.Helpers
import           Mollie.API.Internal (HalJSON)
import           Mollie.API.Types
import           Servant.API
import           Servant.API.Generic

data MethodAPI route = MethodAPI
    { getMethods :: route :- "methods"
                    :> Get '[HalJSON] (List Method)
    -- ^Handler to get a list of payment methods. See https://docs.mollie.com/reference/v2/methods-api/list-methods
    , getMethod  :: route :- "methods"
                    :> Capture "id" PaymentMethod
                    :> Get '[HalJSON] Method
    -- ^Handler to get a payment method by its identifier. See https://docs.mollie.com/reference/v2/methods-api/get-method
    } deriving Generic