{-# LANGUAGE TypeSynonymInstances #-}

module Text.BluePrintCSS.Attr where

import Text.BluePrintCSS.Base


data BoxStyle = Box | Error | Notice | Success
    deriving(Show)

data Attr = Decoration BoxStyle | Append Int | Prepend Int | ShowGrid | ColBorder
    deriving(Show)

type Attrs = [Attr]

toCssClass :: Attr -> String
toCssClass (Decoration Error) = "error"
toCssClass (Decoration Notice) = "notice"
toCssClass (Decoration Success) = "success"
toCssClass (Decoration Box) = "box"
toCssClass ShowGrid = "showgrid"
toCssClass (Append x) = "append-"++show(x)
toCssClass (Prepend x) = "prepend-"++show(x)
toCssClass (ColBorder) = "colborder"

margin :: Attr -> Int
margin (Decoration _) = 1
margin (ColBorder) = 1
margin (Append x) = x
margin (Prepend x) = x
margin _ = 0

instance AsCssClass Attrs where
    asCssClass = map toCssClass

instance AsMargin Attrs where
    smargin = sum . map margin