{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE TemplateHaskell #-}

module Monomer.Dragboard.DragboardModel
    ( DragboardModel(..)
    , boardState
    , selectedSquare
    , animationSources
    , initDragboardModel
    ) where

import Control.Lens
import Data.Map (Map)
import Monomer.Common.BasicTypes
import qualified Data.Map as Map

data DragboardModel a = DragboardModel
    { forall a. DragboardModel a -> [[a]]
_dmBoardState :: [[a]]
    , forall a. DragboardModel a -> Maybe Int
_dmSelectedSquare :: Maybe Int
    , forall a. DragboardModel a -> Map Int Rect
_dmAnimationSources :: Map Int Rect
    } deriving (DragboardModel a -> DragboardModel a -> Bool
forall a. Eq a => DragboardModel a -> DragboardModel a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DragboardModel a -> DragboardModel a -> Bool
$c/= :: forall a. Eq a => DragboardModel a -> DragboardModel a -> Bool
== :: DragboardModel a -> DragboardModel a -> Bool
$c== :: forall a. Eq a => DragboardModel a -> DragboardModel a -> Bool
Eq, Int -> DragboardModel a -> ShowS
forall a. Show a => Int -> DragboardModel a -> ShowS
forall a. Show a => [DragboardModel a] -> ShowS
forall a. Show a => DragboardModel a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DragboardModel a] -> ShowS
$cshowList :: forall a. Show a => [DragboardModel a] -> ShowS
show :: DragboardModel a -> String
$cshow :: forall a. Show a => DragboardModel a -> String
showsPrec :: Int -> DragboardModel a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> DragboardModel a -> ShowS
Show)

makeLensesWith abbreviatedFields 'DragboardModel

initDragboardModel :: DragboardModel a
initDragboardModel :: forall a. DragboardModel a
initDragboardModel = DragboardModel
    { _dmBoardState :: [[a]]
_dmBoardState = []
    , _dmSelectedSquare :: Maybe Int
_dmSelectedSquare = forall a. Maybe a
Nothing
    , _dmAnimationSources :: Map Int Rect
_dmAnimationSources = forall k a. Map k a
Map.empty
    }