{-|
Module      : Diplomacy.Control
Description : Definition of control of provinces.
Copyright   : (c) Alexander Vieth, 2015
Licence     : BSD3
Maintainer  : aovieth@gmail.com
Stability   : experimental
Portability : non-portable (GHC only)
-}

{-# LANGUAGE AutoDeriveTypeable #-}

module Diplomacy.Control (

    Control

  , emptyControl
  , control
  , controller

  ) where

import qualified Data.Map as M
import Diplomacy.Province
import Diplomacy.GreatPower

-- | Indicates which GreatPower most recently had a unit on a given Province
--   at the beginning of an adjust phase.
type Control = M.Map Province GreatPower

emptyControl :: Control
emptyControl = M.empty

control :: Province -> Maybe GreatPower -> Control -> Control
control pr mgp = M.alter (const mgp) pr

controller :: Province -> Control -> Maybe GreatPower
controller = M.lookup