{- |
  Module: DaysDick
  Description: Uptime days stringification
  Copyright: (c) 2025 Mirko Westermeier
  License: MIT
  Maintainer: mirko@westermeier.de
-}
module DaysDick
  ( -- * Extracting days
    Days
  , HasDays(..)
    -- * Days visualization with ASCII art
  , toDick
  ) where

import System.SysInfo

type Days = Int

class HasDays a where
  days :: a -> Days

-- | Extracting days from a 'SysInfo' gives days of 'uptime'.
instance HasDays SysInfo where
  days :: SysInfo -> Days
days SysInfo
si = CLong -> Days
forall a b. (Integral a, Num b) => a -> b
fromIntegral (SysInfo -> CLong
uptime SysInfo
si) Days -> Days -> Days
forall a. Integral a => a -> a -> a
`div` (Days
60Days -> Days -> Days
forall a. Num a => a -> a -> a
*Days
60Days -> Days -> Days
forall a. Num a => a -> a -> a
*Days
24)

-- | >>> toDick week
-- 8=======D
toDick :: HasDays days => days -> String
toDick :: forall days. HasDays days => days -> String
toDick days
x = String
"8" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Days -> Char -> String
forall a. Days -> a -> [a]
replicate (days -> Days
forall a. HasDays a => a -> Days
days days
x) Char
'=' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"D"