module Monomer.Checkerboard.CheckerboardCfg
    ( -- * Configuration
      CheckerboardCfg(..)
    , lightColor
    , darkColor
    ) where

import Control.Applicative ((<|>))
import Data.Default
import Monomer.Graphics.Types

{-|
Configuration options for checkerboard:

- 'lightColor': color of light squares in the checkerboard pattern.
- 'darkColor': color of dark squares in the checkerboard pattern.
-}
data CheckerboardCfg = CheckerboardCfg
    { CheckerboardCfg -> Maybe Color
_ccBgLightColor :: Maybe Color
    , CheckerboardCfg -> Maybe Color
_ccBgDarkColor :: Maybe Color
    }

instance Default CheckerboardCfg where
    def :: CheckerboardCfg
def = CheckerboardCfg
        { _ccBgLightColor :: Maybe Color
_ccBgLightColor = forall a. Maybe a
Nothing
        , _ccBgDarkColor :: Maybe Color
_ccBgDarkColor = forall a. Maybe a
Nothing
        }

instance Semigroup CheckerboardCfg where
    <> :: CheckerboardCfg -> CheckerboardCfg -> CheckerboardCfg
(<>) CheckerboardCfg
a1 CheckerboardCfg
a2 = forall a. Default a => a
def
        { _ccBgLightColor :: Maybe Color
_ccBgLightColor =
            CheckerboardCfg -> Maybe Color
_ccBgLightColor CheckerboardCfg
a2 forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> CheckerboardCfg -> Maybe Color
_ccBgLightColor CheckerboardCfg
a1
        , _ccBgDarkColor :: Maybe Color
_ccBgDarkColor = CheckerboardCfg -> Maybe Color
_ccBgDarkColor CheckerboardCfg
a2 forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> CheckerboardCfg -> Maybe Color
_ccBgDarkColor CheckerboardCfg
a1
        }

instance Monoid CheckerboardCfg where
    mempty :: CheckerboardCfg
mempty = forall a. Default a => a
def

{-|
Sets color of light squares in the checkerboard pattern.
-}
lightColor :: Color -> CheckerboardCfg
lightColor :: Color -> CheckerboardCfg
lightColor Color
c = forall a. Default a => a
def
    { _ccBgLightColor :: Maybe Color
_ccBgLightColor = forall a. a -> Maybe a
Just Color
c
    }

{-|
Sets color of dark squares in the checkerboard pattern.
-}
darkColor :: Color -> CheckerboardCfg
darkColor :: Color -> CheckerboardCfg
darkColor Color
c = forall a. Default a => a
def
    { _ccBgDarkColor :: Maybe Color
_ccBgDarkColor = forall a. a -> Maybe a
Just Color
c
    }