-- |This module provides ''skins'' for line-drawing widgets such as
-- borders.  Different skins may be suitable for terminals with
-- different capabilities, but they are provided for greatest
-- flexibility.  Unicode skins must be used with care, as not all
-- terminals support unicode characters (but most do, these days).
module Graphics.Vty.Widgets.Skins
    ( Skin(..)
    , asciiSkin
    , unicodeSkin
    , unicodeBoldSkin
    , unicodeRoundedSkin
    )
where

-- Corners start from top left and go clockwise.  Intersections are:
-- full, left, right, top, bottom.
data Skin = Skin { skinCornerTL :: Char
                 , skinCornerTR :: Char
                 , skinCornerBR :: Char
                 , skinCornerBL :: Char
                 , skinIntersectionFull :: Char
                 , skinIntersectionL :: Char
                 , skinIntersectionR :: Char
                 , skinIntersectionT :: Char
                 , skinIntersectionB :: Char
                 , skinHorizontal :: Char
                 , skinVertical :: Char
                 }

-- |An ASCII skin which will work in any terminal.
asciiSkin :: Skin
asciiSkin = Skin { skinCornerTL = '+'
                 , skinCornerTR = '+'
                 , skinCornerBR = '+'
                 , skinCornerBL = '+'
                 , skinIntersectionFull = '+'
                 , skinIntersectionL = '+'
                 , skinIntersectionR = '+'
                 , skinIntersectionT = '+'
                 , skinIntersectionB = '+'
                 , skinHorizontal = '-'
                 , skinVertical = '|'
                 }

unicodeSkin :: Skin
unicodeSkin = Skin { skinCornerTL = '┌'
                   , skinCornerTR = '┐'
                   , skinCornerBR = '┘'
                   , skinCornerBL = '└'
                   , skinIntersectionFull = '┼'
                   , skinIntersectionL = '├'
                   , skinIntersectionR = '┤'
                   , skinIntersectionT = '┬'
                   , skinIntersectionB = '┴'
                   , skinHorizontal = '─'
                   , skinVertical = '│'
                   }

unicodeBoldSkin :: Skin
unicodeBoldSkin = Skin { skinCornerTL = '┏'
                       , skinCornerTR = '┓'
                       , skinCornerBR = '┛'
                       , skinCornerBL = '┗'
                       , skinIntersectionFull = '╋'
                       , skinIntersectionL = '┣'
                       , skinIntersectionR = '┫'
                       , skinIntersectionT = '┳'
                       , skinIntersectionB = '┻'
                       , skinHorizontal = '━'
                       , skinVertical = '┃'
                       }

unicodeRoundedSkin :: Skin
unicodeRoundedSkin = Skin { skinCornerTL = '╭'
                          , skinCornerTR = '╮'
                          , skinCornerBR = '╯'
                          , skinCornerBL = '╰'
                          , skinIntersectionFull = '┼'
                          , skinIntersectionL = '├'
                          , skinIntersectionR = '┤'
                          , skinIntersectionT = '┬'
                          , skinIntersectionB = '┴'
                          , skinHorizontal = '─'
                          , skinVertical = '│'
                          }