{-
   ApproveAPISwagger

   The simple API to request a user's approval on anything via email + sms.

   OpenAPI Version: 3.0.0
   ApproveAPISwagger API version: 1.0.1
   Contact: dev@approveapi.com
   Generated by OpenAPI Generator (https://openapi-generator.tech)
-}

{-|
Module : ApproveApi.API.Approve
-}

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-imports #-}

module ApproveApi.API.Approve where

import ApproveApi.Core
import ApproveApi.MimeTypes
import ApproveApi.Model as M

import qualified Data.Aeson as A
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
import qualified Data.Data as P (Typeable, TypeRep, typeOf, typeRep)
import qualified Data.Foldable as P
import qualified Data.Map as Map
import qualified Data.Maybe as P
import qualified Data.Proxy as P (Proxy(..))
import qualified Data.Set as Set
import qualified Data.String as P
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TL
import qualified Data.Time as TI
import qualified Network.HTTP.Client.MultipartFormData as NH
import qualified Network.HTTP.Media as ME
import qualified Network.HTTP.Types as NH
import qualified Web.FormUrlEncoded as WH
import qualified Web.HttpApiData as WH

import Data.Text (Text)
import GHC.Base ((<|>))

import Prelude ((==),(/=),($), (.),(<$>),(<*>),(>>=),Maybe(..),Bool(..),Char,Double,FilePath,Float,Int,Integer,String,fmap,undefined,mempty,maybe,pure,Monad,Applicative,Functor)
import qualified Prelude as P

-- * Operations


-- ** Approve

-- *** createPrompt

-- | @POST \/prompt@
-- 
-- Sending a prompt
-- 
-- Creates a prompt and pushes it to the user (sends via email, sms, or other supported protocols).
-- 
-- AuthMethod: 'AuthBasicApiKey'
-- 
createPrompt 
  :: (Consumes CreatePrompt MimeJSON, MimeRender MimeJSON CreatePromptRequest)
  => CreatePromptRequest -- ^ "createPromptRequest"
  -> ApproveApiRequest CreatePrompt MimeJSON Prompt MimeJSON
createPrompt createPromptRequest =
  _mkRequest "POST" ["/prompt"]
    `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicApiKey)
    `setBodyParam` createPromptRequest

data CreatePrompt 
instance HasBodyParam CreatePrompt CreatePromptRequest 

-- | @application/json@
instance Consumes CreatePrompt MimeJSON

-- | @application/json@
instance Produces CreatePrompt MimeJSON


-- *** getPrompt

-- | @GET \/prompt\/{id}@
-- 
-- Retrieve a prompt
-- 
-- Retrieve the prompt object with the given ID.
-- 
-- AuthMethod: 'AuthBasicApiKey'
-- 
getPrompt 
  :: Id -- ^ "id" -  The identifier for a pending or completed prompt. This is returned when you create a prompt.
  -> ApproveApiRequest GetPrompt MimeNoContent Prompt MimeJSON
getPrompt (Id id) =
  _mkRequest "GET" ["/prompt/",toPath id]
    `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicApiKey)

data GetPrompt  

-- | /Optional Param/ "long_poll" - If true, the request waits (long-polls) until the user responds to the prompt or more than 10 minutes pass. Defaults to false.
instance HasOptionalParam GetPrompt LongPoll where
  applyOptionalParam req (LongPoll xs) =
    req `setQuery` toQuery ("long_poll", Just xs)

-- | @application/json@
instance Produces GetPrompt MimeJSON


-- *** getPromptStatus

-- | @GET \/prompt\/{id}\/status@
-- 
-- Check prompt status
-- 
-- Returns whether a prompt has been completed by the user. This request does not require authentication, and so can be used client-side without sharing API credentials.
-- 
getPromptStatus 
  :: Id -- ^ "id" -  The prompt identifier.
  -> ApproveApiRequest GetPromptStatus MimeNoContent PromptStatus MimeJSON
getPromptStatus (Id id) =
  _mkRequest "GET" ["/prompt/",toPath id,"/status"]

data GetPromptStatus  

-- | @application/json@
instance Produces GetPromptStatus MimeJSON