module Reddit.Routes.Message where

import Reddit.Types.Options
import Reddit.Types.Message
import Reddit.Types.Thing
import Reddit.Types.User

import Data.Text (Text)
import Network.API.Builder.Routes

inbox :: Bool -> Options MessageKind -> Route
inbox :: Bool -> Options MessageKind -> Route
inbox Bool
shouldMark Options MessageKind
opts =
  [URLPiece] -> [URLParam] -> Method -> Route
Route [ URLPiece
"message", URLPiece
"inbox" ]
        [ URLPiece
"mark" URLPiece -> Bool -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Bool
shouldMark
        , URLPiece
"before" URLPiece -> Maybe MessageKind -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Options MessageKind -> Maybe MessageKind
forall a. Options a -> Maybe a
before Options MessageKind
opts
        , URLPiece
"after" URLPiece -> Maybe MessageKind -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Options MessageKind -> Maybe MessageKind
forall a. Options a -> Maybe a
after Options MessageKind
opts
        , URLPiece
"limit" URLPiece -> Maybe Int -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Options MessageKind -> Maybe Int
forall a. Options a -> Maybe Int
limit Options MessageKind
opts ]
        Method
"GET"

unread :: Bool -> Options MessageKind -> Route
unread :: Bool -> Options MessageKind -> Route
unread Bool
shouldMark Options MessageKind
opts =
  [URLPiece] -> [URLParam] -> Method -> Route
Route [ URLPiece
"message", URLPiece
"unread" ]
        [ URLPiece
"mark" URLPiece -> Bool -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Bool
shouldMark
        , URLPiece
"before" URLPiece -> Maybe MessageKind -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Options MessageKind -> Maybe MessageKind
forall a. Options a -> Maybe a
before Options MessageKind
opts
        , URLPiece
"after" URLPiece -> Maybe MessageKind -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Options MessageKind -> Maybe MessageKind
forall a. Options a -> Maybe a
after Options MessageKind
opts
        , URLPiece
"limit" URLPiece -> Maybe Int -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. Options MessageKind -> Maybe Int
forall a. Options a -> Maybe Int
limit Options MessageKind
opts ]
        Method
"GET"

readMessage :: Thing a => a -> Route
readMessage :: a -> Route
readMessage a
m = [URLPiece] -> [URLParam] -> Method -> Route
Route [ URLPiece
"api", URLPiece
"read_message" ]
                      [ URLPiece
"id" URLPiece -> URLPiece -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. a -> URLPiece
forall a. Thing a => a -> URLPiece
fullName a
m ]
                      Method
"POST"

sendMessage :: Username -> Text -> Text -> Route
sendMessage :: Username -> URLPiece -> URLPiece -> Route
sendMessage (Username URLPiece
u) URLPiece
s URLPiece
b =
  [URLPiece] -> [URLParam] -> Method -> Route
Route [ URLPiece
"api", URLPiece
"compose" ]
        [ URLPiece
"to" URLPiece -> URLPiece -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. URLPiece
u
        , URLPiece
"subject" URLPiece -> URLPiece -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. URLPiece
s
        , URLPiece
"text" URLPiece -> URLPiece -> URLParam
forall a. ToQuery a => URLPiece -> a -> URLParam
=. URLPiece
b ]
        Method
"POST"