module Data.Time.Hora.Future where

import Data.Time.Clock
import Data.Time.Hora.Type.Time
import Data.Time.Hora.Convert


{- | 'getCurrentTime' +/- offset

from unit test:

@
getCurrentTime
futureUTCTime $ Milli 100
futureUTCTime $ Sec 3

2016-12-12 15:34:03.138798524 UTC
2016-12-12 15:34:03.23893359 UTC
2016-12-12 15:34:06.138978355 UTC
@   -}
futureUTCTime::Integral a => TimeSpan a -> IO UTCTime
futureUTCTime ts0 = getCurrentTime >>=
                pure . (addUTCTime diff1)
    where diff1 = nominalDiff ts0


-- | time diff in milli
timeDiffMs::UTCTime -> UTCTime -> Int
timeDiffMs t1 t2 =
    let t1_ = utctDayTime t1
        t2_ = utctDayTime t2
        d3 = diffTimeToPicoseconds $ t2_ - t1_
    in toMilli $ Pico d3