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

game:
  time_limit_seconds: 300
  undo_dispenser_pickup: true
  validate_recipes: true


layout_chars:
  _: Free
  hash: Counter  # #
  equal: EdgeCounter  # =
  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:
  meals:
    all: true
    # if all: false -> only orders for these meals are generated
    # TODO: what if this list is empty?
    list:
      #      - TomatoSoup
      #      - OnionSoup
      #      - Salad
      - FriedFish
  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: 55
        b: 65
    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: 35
        b: 45
    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.25
  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


hook_callbacks:
  # # ---------------  Scoring  ---------------
  orders:
    hooks: [ completed_order ]
    callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
    callback_class_kwargs:
      time_dependence_func: !!python/name:cooperative_cuisine.scores.constant_score ''
      time_dependence_kwargs: { }
      static_score: 100
      score_on_specific_kwarg: meal_name
      score_map:
        Burger: 15
        OnionSoup: 10
        Salad: 5
        TomatoSoup: 10
  not_ordered_meals:
    hooks: [ serve_not_ordered_meal ]
    callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
    callback_class_kwargs:
      static_score: 2
  trashcan_usages:
    hooks: [ trashcan_usage ]
    callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
    callback_class_kwargs:
      static_score: -5
  expired_orders:
    hooks: [ order_expired ]
    callback_class: !!python/name:cooperative_cuisine.scores.ScoreViaHooks ''
    callback_class_kwargs:
      static_score: -10
    # --------------- Recording ---------------
  #  json_states:
  #    hooks: [ json_state ]
  #    callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
  #    callback_class_kwargs:
  #      record_path: USER_LOG_DIR/ENV_NAME/json_states.jsonl
  actions:
    hooks: [ pre_perform_action ]
    callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
    callback_class_kwargs:
      record_path: USER_LOG_DIR/ENV_NAME/LOG_RECORD_NAME.jsonl
  random_env_events:
    hooks: [ order_duration_sample, plate_out_of_kitchen_time ]
    callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
    callback_class_kwargs:
      record_path: USER_LOG_DIR/ENV_NAME/LOG_RECORD_NAME.jsonl
      add_hook_ref: true
  env_configs:
    hooks: [ env_initialized, item_info_config ]
    callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
    callback_class_kwargs:
      record_path: USER_LOG_DIR/ENV_NAME/LOG_RECORD_NAME.jsonl
      add_hook_ref: true

  # Game event recording
  game_events:
    hooks:
      - post_counter_pick_up
      - post_counter_drop_off
      - post_dispenser_pick_up
      - cutting_board_100
      - player_start_interaction
      - player_end_interact
      - post_serving
      - no_serving
      - dirty_plate_arrives
      - trashcan_usage
      - plate_cleaned
      - added_plate_to_sink
      - drop_on_sink_addon
      - pick_up_from_sink_addon
      - serve_not_ordered_meal
      - serve_without_plate
      - completed_order
      - new_orders
      - order_expired
      - action_on_not_reachable_counter
      - new_fire
      - fire_spreading
      - drop_off_on_cooking_equipment
      - players_collide
      - post_plate_dispenser_pick_up
      - post_plate_dispenser_drop_off
      - drop_off_on_cooking_equipment_plate_dispenser
      - on_item_transition
      - progress_started
      - progress_finished
      - content_ready
      - dispenser_item_returned
      - additional_state_update
      - game_ended_step

    callback_class: !!python/name:cooperative_cuisine.recording.FileRecorder ''
    callback_class_kwargs:
      record_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