content: module Reddit.Types.Wiki where
  
  import Reddit.Parser
  import Reddit.Types.User
  import Reddit.Utilities
  
  import Control.Applicative
  import Data.Aeson
  import Data.Monoid
  import Data.Text (Text)
  import Data.Time.Clock
  import Data.Time.Clock.POSIX
  import Prelude
  
  newtype RevisionID = RevisionID Text
    deriving (Show, Read, Eq)
  
  data WikiPage = WikiPage { contentHTML :: Maybe Text
                           , contentMarkdown :: Text
                           , revisionDate :: UTCTime
                           , revisedBy :: Username
                           , canRevise :: Bool }
    deriving (Show, Read, Eq)
  
  instance FromJSON WikiPage where
    parseJSON (Object o) = do
      o `ensureKind` "wikipage"
      d <- o .: "data"
      WikiPage <$> (fmap unescape <$> d .:? "content_html")
               <*> (unescape <$> d .: "content_md")
               <*> (posixSecondsToUTCTime . fromInteger <$> d .: "revision_date")
               <*> ((d .: "revision_by") >>= (.: "data") >>= (.: "name"))
               <*> d .: "may_revise"
    parseJSON _ = mempty
  