module arch.node.engines.ticker_environment;

import prelude open;
import arch.node.types.basics open;
import arch.node.engines.ticker_messages open;
import arch.node.types.engine_environment open;
import arch.node.types.messages open;
import arch.node.types.identities open;
import arch.node.types.anoma_message as Anoma open;

syntax alias TickerMailboxState := Unit;

type TickerLocalState :=
  mkTickerLocalState@{
    counter : Nat;
  };

syntax alias TickerTimerHandle := Unit;

TickerTimestampedTrigger : Type :=
  TimestampedTrigger TickerTimerHandle Anoma.Msg;

TickerEnv : Type :=
  EngineEnv TickerLocalState TickerMailboxState TickerTimerHandle Anoma.Msg;

module ticker_environment_example;
  
  tickerEnv : TickerEnv :=
    mkEngineEnv@{
      localState :=
        mkTickerLocalState@{
          counter := 0;
        };
      mailboxCluster := Map.empty;
      acquaintances := Set.empty;
      timers := [];
    };
end;