{-# LANGUAGE OverloadedStrings #-}

module Web.Hablog.Page where

import           Control.Arrow  ((&&&))
import qualified Data.Map as M
import qualified Data.Text.Lazy as T
import qualified Text.Blaze.Html5 as H

import Web.Hablog.Utils

data Page
    = Page
    { getPageURL     :: FilePath
    , getPageName    :: T.Text
    , getPageContent :: H.Html
    }

toPage :: T.Text -> Maybe Page
toPage fileContent =
  Page <$> fmap T.unpack (M.lookup "route" header)
       <*> M.lookup "title" header
       <*> pure (createBody content)
    where (header, content) = (getHeader &&& getContent) fileContent


instance Show Page where
  show = getPageURL

instance Eq Page where
  (==) p1 p2 = getPageURL p1 == getPageURL p2

instance Ord Page where
  compare p1 p2
    | getPageName p1 < getPageName p2 = LT
    | otherwise = GT