module FRP.Helm.Color where

data Color = Color { r :: !Double, g :: !Double, b :: !Double, a :: !Double }

-- |Creates an RGB color.
rgb :: Double -> Double -> Double -> Color
rgb r g b = Color r g b 1

-- |Creates an RGB color, with transparency.
rgba :: Double -> Double -> Double -> Double -> Color
rgba = Color

red :: Color
red = rgb 1 0 0

lime :: Color
lime = rgb 0 1 0

blue :: Color
blue = rgb 0 0 1

yellow :: Color
yellow = rgb 1 1 0

cyan :: Color
cyan = rgb 0 1 1

magenta :: Color
magenta = rgb 1 0 1

black :: Color
black = rgb 0 0 0

white :: Color
white = rgb 1 1 1

gray :: Color
gray = rgb 0.5 0.5 0.5

grey :: Color
grey = gray

maroon :: Color
maroon = rgb 0.5 0 0

navy :: Color
navy = rgb 0 0 0.5

green :: Color
green = rgb 0 0.5 0

teal :: Color
teal = rgb 0 0.5 0.5

purple :: Color
purple = rgb 0.5 0 0.5

violet :: Color
violet = rgb 0.923 0.508 0.923

forestGreen :: Color
forestGreen = rgb 0.133 0.543 0.133

{- TODO:

complement :: Color -> Color

hsva :: Double -> Double -> Double -> Double -> Color

hsv :: Double -> Double -> Double -> Color
-}

data Gradient = Linear (Double, Double) (Double, Double) [(Double, Color)] |
                Radial (Double, Double) Double (Double, Double) Double [(Double, Color)]


-- |Creates a linear gradient. Takes an 
linear :: (Double, Double) -> (Double, Double) -> [(Double, Color)] -> Gradient
linear = Linear

-- |Creates a radial gradient.
radial :: (Double, Double) -> Double -> (Double, Double) -> Double -> [(Double, Color)] -> Gradient
radial = Radial