module Text.Time.Pretty
  ( prettyTimeAutoFromNow
  , prettyTimeAuto
  , prettyDayAutoFromNow
  , prettyDayAuto
    -- Helper functions
  , timeAgo
  , timeAgoToDiffTime
  , daysAgo
  , daysAgoToDays
    -- * Helper Types
  , TimeAgo(..)
  , DaysAgo(..)
    -- * Rendering
  , renderDaysAgoAuto
  , renderTimeAgoAuto
    -- * Constants
    , picoSecondsPerSecond
    , secondsPerMinute
    , minutesPerHour
    , hoursPerDay
    , daysPerWeek
    ) where

import Data.Time

import Text.Time.Pretty.Constants
import Text.Time.Pretty.Render
import Text.Time.Pretty.TimeAgo

prettyTimeAutoFromNow :: UTCTime -> IO String
prettyTimeAutoFromNow before = do
    now <- getCurrentTime
    pure $ prettyTimeAuto now before

prettyTimeAuto :: UTCTime -> UTCTime -> String
prettyTimeAuto now before = renderTimeAgoAuto $ timeAgo $ diffUTCTime now before

prettyDayAutoFromNow :: Day -> IO String
prettyDayAutoFromNow before = do
  today <- (localDay . zonedTimeToLocalTime) <$> getZonedTime
  pure $ prettyDayAuto today before

prettyDayAuto :: Day -> Day -> String
prettyDayAuto today before = renderDaysAgoAuto $ daysAgo $ diffDays today before