plates:
  clean_plates: 2
  dirty_plates: 0
  plate_delay: [ 5, 10 ]
  # range of seconds until the dirty plate arrives.

game:
  time_limit_seconds: 1
  undo_dispenser_pickup: true
  validate_recipes: false

meals:
  all: true
  # if all: false -> only orders for these meals are generated
  # TODO: what if this list is empty?
  list:
    - TomatoSoup
    - OnionSoup
    - Salad
    - Burger

layout_chars:
  _: Free
  hash: Counter  # #
  A: Agent
  pipe: Extinguisher
  P: PlateDispenser
  C: CuttingBoard
  X: Trashcan
  $: ServingWindow
  S: Sink
  +: SinkAddon
  at: Plate  # @ just a clean plate on a counter
  U: Pot  # with Stove
  Q: Pan  # with Stove
  O: Peel  # with Oven
  F: Basket  # with DeepFryer
  T: Tomato
  N: Onion  # oNioN
  L: Lettuce
  K: Potato  # Kartoffel
  I: Fish  # fIIIsh
  D: Dough
  E: Cheese  # chEEEse
  G: Sausage  # sausaGe
  B: Bun
  M: Meat
  question: Counter  # ? mushroom
  ↓: Counter
  ^: Counter
  right: Counter
  left: Counter
  wave: Free  # ~ Water
  minus: Free  # - Ice
  dquote: Counter  # " wall/truck
  p: Counter # second plate return ??


orders:
  order_gen_class: !!python/name:cooperative_cuisine.orders.RandomOrderGeneration ''
  # the class to that receives the kwargs. Should be a child class of OrderGeneration in orders.py
  order_gen_kwargs:
    order_duration_random_func:
      # how long should the orders be alive
      # 'random' library call with getattr, kwargs are passed to the function
      func: uniform
      kwargs:
        a: 40
        b: 60
    max_orders: 6
    # maximum number of active orders at the same time
    num_start_meals: 2
    # number of orders generated at the start of the environment
    sample_on_dur_random_func:
      # 'random' library call with getattr, kwargs are passed to the function
      func: uniform
      kwargs:
        a: 10
        b: 20
    sample_on_serving: false
    # Sample the delay for the next order only after a meal was served.
  serving_not_ordered_meals: true
  # can meals that are not ordered be served / dropped on the serving window

player_config:
  radius: 0.4
  speed_units_per_seconds: 6
  interaction_range: 1.6
  restricted_view: False
  view_angle: 70
  view_range: 4  # in grid units, can be "null"

effect_manager:
  FireManager:
    class: !!python/name:cooperative_cuisine.effects.FireEffectManager ''
    kwargs:
      spreading_duration: [ 5, 10 ]
      fire_burns_ingredients_and_meals: true


extra_setup_functions:
  # # ---------------  Scoring  ---------------
  orders:
    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
    kwargs:
      hooks: [ completed_order ]
      callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
      callback_class_kwargs:
        static_score: 20
        score_on_specific_kwarg: meal_name
        score_map:
          Burger: 15
          OnionSoup: 10
          Salad: 5
          TomatoSoup: 10
  not_ordered_meals:
    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
    kwargs:
      hooks: [ serve_not_ordered_meal ]
      callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
      callback_class_kwargs:
        static_score: 2
  trashcan_usages:
    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
    kwargs:
      hooks: [ trashcan_usage ]
      callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
      callback_class_kwargs:
        static_score: -5
  expired_orders:
    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
    kwargs:
      hooks: [ order_expired ]
      callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
      callback_class_kwargs:
        static_score: -10
  # # --------------- Recording ---------------
  #  json_states:
  #    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
  #    kwargs:
  #      hooks: [ json_state ]
  #      callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
  #      callback_class_kwargs:
  #        log_path: USER_LOG_DIR/ENV_NAME/json_states.jsonl
  actions:
    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
    kwargs:
      hooks: [ pre_perform_action ]
      callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
      callback_class_kwargs:
        log_path: USER_LOG_DIR/ENV_NAME/LOG_RECORD_NAME.jsonl
  random_env_events:
    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
    kwargs:
      hooks: [ order_duration_sample, plate_out_of_kitchen_time ]
      callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
      callback_class_kwargs:
        log_path: USER_LOG_DIR/ENV_NAME/LOG_RECORD_NAME.jsonl
        add_hook_ref: true
  env_configs:
    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
    kwargs:
      hooks: [ env_initialized, item_info_config ]
      callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
      callback_class_kwargs:
        log_path: USER_LOG_DIR/ENV_NAME/LOG_RECORD_NAME.jsonl
        add_hook_ref: true
#  info_msg:
#    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
#    kwargs:
#      hooks: [ cutting_board_100 ]
#      callback_class: !!python/name:cooperative_cuisine.info_msg.InfoMsgManager ''
#      callback_class_kwargs:
#        msg: Glückwunsch du hast was geschnitten!
#  fire_msg:
#    func: !!python/name:cooperative_cuisine.hooks.hooks_via_callback_class ''
#    kwargs:
#      hooks: [ new_fire ]
#      callback_class: !!python/name:cooperative_cuisine.info_msg.InfoMsgManager ''
#      callback_class_kwargs:
#        msg: Feuer, Feuer, Feuer
#        level: Warning
