module Data.Woot.WChar
    ( WChar(..)
    , WCharId(..)
    , ClientId
    , hide
    ) where


data WChar = WChar
    { wCharId      :: WCharId
    , wCharVisible :: Bool
    , wCharAlpha   :: Char
    , wCharPrevId  :: Maybe WCharId
    , wCharNextId  :: Maybe WCharId
    } deriving (Eq, Show)


type ClientId = Int


data WCharId = WCharId
    { wCharIdClientId :: ClientId
    , wCharIdClock    :: Int
    } deriving (Eq, Show)


instance Ord WCharId where
    compare = compareCharIds


compareCharIds :: WCharId -> WCharId -> Ordering
compareCharIds (WCharId cA iA) (WCharId cB iB) = compare (cA, iA) (cB, iB)


hide :: WChar -> WChar
hide (WChar wid _ a p n) = WChar wid False a p n