module Ansi where

progress :: Double -> Int -> String
progress percent size =
  makeInverse
    ((replicate sizeCompleted ' ') ++ makeGrey (replicate sizeRemaining ' '))
  where
    size' = fromIntegral size :: Double
    sizeCompleted = round $ size' * percent / 100
    sizeRemaining = size - sizeCompleted

reset :: String
reset = "\x1B[0m"

bold :: String
bold = "\x1B[1m"

underline :: String
underline = "\x1B[4m"

inverse :: String
inverse = "\x1B[7m"

crossed :: String
crossed = "\x1B[9m"

resetEmphasis :: String
resetEmphasis = "\x1B[22m"

resetUnderline :: String
resetUnderline = "\x1B[24m"

red :: String
red = "\x1B[31m"

green :: String
green = "\x1B[32m"

grey :: String
grey = "\x1B[2;37m"

makeBold :: String -> String
makeBold s = bold ++ s ++ reset

makeUnderline :: String -> String
makeUnderline s = underline ++ s ++ reset

makeInverse :: String -> String
makeInverse s = inverse ++ s ++ reset

makeCrossed :: String -> String
makeCrossed s = crossed ++ s ++ reset

makeResetEmphasis :: String -> String
makeResetEmphasis s = resetEmphasis ++ s ++ reset

makeResetUnderline :: String -> String
makeResetUnderline s = resetUnderline ++ s ++ reset

makeRed :: String -> String
makeRed s = red ++ s ++ reset

makeGreen :: String -> String
makeGreen s = green ++ s ++ reset

makeGrey :: String -> String
makeGrey s = grey ++ s ++ reset