-- | Contains actions which are applicable to both Posts and Comments,
--   like replying, deleting and reporting.
module Reddit.Actions.Thing
  ( Reddit.Actions.Thing.reply
  , Reddit.Actions.Thing.delete
  , Reddit.Actions.Thing.report ) where

import Reddit.Types
import Reddit.Types.Empty
import Reddit.Types.Reddit
import qualified Reddit.Routes.Thing as Route

import Data.Text (Text)

-- | Reply to a something (a post \/ comment \/ message)
reply :: (Monad m, Thing a)
      => a -- ^ Thing to reply to
      -> Text -- ^ Response contents
      -> RedditT m CommentID
reply t b = do
  POSTWrapped res <- runRoute $ Route.reply t b
  return res

-- | Delete something you created. Note that this is different to removing
--   a post / comment as a moderator action. Deleting something you don't
--   own won't error (but naturally won't delete anything either).
delete :: (Monad m, Thing a)
       => a -- ^ Thing to delete
       -> RedditT m ()
delete = nothing . runRoute . Route.delete

-- | Report something.
report :: (Monad m, Thing a)
       => a -- ^ Thing to report
       -> Text -- ^ Reason for reporting
       -> RedditT m ()
report t r = nothing $ runRoute $ Route.report t r