from groggy.events import bus
from tavern.events.events import MAIN_MENU_EVENT
from tavern.world.objects.defaults import (
    bed, door, chair, table, counter, beam, oven, work_station, brewing_vat)
from tavern.world.objects.objects import Rooms

CROSSHAIR = 0
FILLER = 1


class Actions:
    BUILD = 0
    BUILD_COST = 10
    PUT = 1
    ROOMS = 2

objects_tree = {'d': {'display': 'Door', 'subobject': door},
                'c': {'display': 'Chair', 'subobject': chair},
                't': {'display': 'Table', 'subobject': table},
                'o': {'display': 'Counter', 'subobject': counter},
                'b': {'display': 'Beam', 'subobject': beam},
                'e': {'display': 'Bed', 'subobject': bed},
                'v': {'display': 'Oven', 'subobject': oven},
                'a': {'display': 'Brewing vat', 'subobject': brewing_vat},
                'w': {'display': 'Workstation', 'subobject': work_station}}


room_types = {'t': {'display': 'Tavern', 'subobject': Rooms.TAVERN},
              'b': {'display': 'Brewery', 'subobject': Rooms.BREWERY},
              's': {'display': 'Storage', 'subobject': Rooms.STORAGE},
              'r': {'display': 'Inn room', 'subobject': Rooms.ROOM},
              'k': {'display': 'Kitchen', 'subobject': Rooms.KITCHEN}}

main_menu = {'type': 'RootComponent',
             'template': 'centered 5',
             'title': 'Tavern',
             'children': [
                 {'type': 'Button',
                  'x': 5,
                  'y': 1,
                  'text': 'Start new game',
                  'event': {'action': 'new_game'},
                  'event_type': MAIN_MENU_EVENT},
                 {'type': 'Button',
                  'x': 5,
                  'y': 2,
                  'text': 'Load game',
                  'event': {'action': 'load_game'},
                  'event_type': MAIN_MENU_EVENT},
                 {'type': 'Button',
                  'x': 5,
                  'y': 3,
                  'text': 'Quit game',
                  'event': {'action': 'quit_game'},
                  'event_type': MAIN_MENU_EVENT}]
             }


supplies_menu = {'type': 'RootComponent',
                 'template': 'centered 5',
                 'title': 'Supplies',
                 'children': [
                     {'type': 'StaticText',
                      'x': 1,
                      'y': 1,
                      'content': 'Cash :'},
                     {'type': 'DynamicText',
                      'x': 20,
                      'y': 1,
                      'source': 'cash'},
                     {'type': 'StaticText',
                      'x': 1,
                      'y': 2,
                      'content': 'Storage room :'},
                     {'type': 'Ruler',
                      'x': 20,
                      'y': 2,
                      'source': 'storage',
                      'selectable': False
                      },
                     {'type': 'Line',
                      'x': 0,
                      'w': '100%',
                      'y': 3},
                     {'type': 'Foreach',
                      'source': 'goods.supplies',
                      'do': [{'type': 'StaticText',
                              'x': 5,
                              'eat_line': False},
                             {'type': 'DynamicText',
                              'x': 25,
                              'source_builder': 'price'},
                             {'type': 'NumberPicker',
                              'minimum': 1,
                              'maximum': 100,
                              'x': 5,
                              'w': '80%'}]
                      }]}

help_menu = {'type': 'RootComponent',
             'template': 'centered 5',
             'title': 'Help',
             'children': [{'type': 'Foreach',
                           'source': 'state',
                           'do': [{'type': 'DynamicText',
                                   'x': 5,
                                   'source_builder': 'key',
                                   'eat_line': False},
                                  {'type': 'DynamicText',
                                   'x': 20,
                                   'source_builder': 'name'}]
                           }]}


prices_menu = {'type': 'RootComponent',
               'template': 'centered 5',
               'title': 'Prices',
               'children': [
                   {'type': 'Line',
                    'x': 0,
                    'w': '100%',
                    'y': 3},
                   {'type': 'Foreach',
                    'source': 'goods.supplies',
                    'do': [{'type': 'StaticText',
                            'x': 5,
                            'eat_line': False},
                           {'type': 'NumberPicker',
                            'minimum': 1,
                            'maximum': 100,
                            'x': 25,
                            'w': '80%'}]
                    }]}

examine_menu = {'type': 'RootComponent',
                'template': 'centered 5',
                'title': 'Examine',
                'children': [
                    {'type': 'DynamicText',
                     'x': 5,
                     'y': 2,
                     'source': 'name'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 2,
                     'source': 'level'},
                    {'type': 'DynamicText',
                     'x': 35,
                     'y': 2,
                     'source': 'race'},
                    {'type': 'DynamicText',
                     'x': 50,
                     'y': 2,
                     'source': 'class'},
                    {'type': 'Line',
                     'x': 0,
                     'w': '100%',
                     'y': 3},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 5,
                     'content': 'Money'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 5,
                     'source': 'money'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 6,
                     'content': 'Thirst'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 6,
                     'source': 'thirst'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 7,
                     'content': 'Hunger'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 7,
                     'source': 'hunger'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 8,
                     'content': 'Sleepiness'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 8,
                     'source': 'sleep'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 11,
                     'content': 'Current activity'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 11,
                     'source': 'activity'},
                    {'type': 'Button',
                     'x': 25,
                     'y': 12,
                     'text': 'Recruit',
                     'event': 'recruit',
                     'event_type': bus.MENU_MODEL_EVENT}]}


task_menu = {'type': 'RootComponent',
             'template': 'centered 5',
             'title': 'Tasks',
             'children': [
                 {'type': 'Line',
                  'x': 0,
                  'w': '100%',
                  'y': 3},
                 {'type': 'Foreach',
                  'source': 'tasks',
                  'do': [{'type': 'StaticText',
                          'source_getter': 'name',
                          'x': 5,
                          'eat_line': False},
                         {'type': 'StaticText',
                          'source_getter': 'status',
                          'x': 30,
                          'eat_line': False,
                          },
                         {'type': 'StaticText',
                          'source_getter': 'owner',
                          'x': 50}]}
             ]
             }

order_menu = {'type': 'RootComponent',
              'template': 'centered 5',
              'title': 'Order',
              'children': [
                  {'type': 'Line',
                   'x': 0,
                   'w': '100%',
                   'y': 3},
                  {'type': 'Foreach',
                   'source': 'recipes.drinks',
                   'do': [{'type': 'StaticText',
                           'x': 5,
                           'eat_line': False},
                          {'type': 'NumberPicker',
                           'minimum': 1,
                           'maximum': 100,
                           'x': 20,
                           'w': '80%'}]}
              ]
              }


new_brew = {'name': 'Create brew',
            'template': 'centered 5',
            'title': 'Design a brew',
            'children': [
                {'type': 'StaticText',
                 'content': 'Grains',
                 'x': 2,
                 'w': '100%',
                 'y': 3,
                 },
                {'type': 'List',
                 'x': 2,
                 'w': '30%',
                 'y': 5,
                 'source': 'grains'
                 },
                {'type': 'StaticText',
                 'content': 'Aromas',
                 'x': 25,
                 'w': '100%',
                 'y': 3,
                 },
                {'type': 'List',
                 'source': 'aromas',
                 'x': 25,
                 'w': '30%',
                 'y': 5},
                {'type': 'Checkbox',
                 'label': 'Roast grains ?',
                 'source': 'roasted',
                 'x': 2,
                 'y': 10},
                {'type': 'StaticText',
                 'content': 'Name your brew : ',
                 'x': 2,
                 'y': 12},
                {'type': 'Input',
                 'x': 20,
                 'y': 12,
                 'source': 'name',
                 },
                {'type': 'Button',
                 'x': 20,
                 'y': 15,
                 'text': 'Create new brew',
                 'event': {'action': 'create_brew'},
                 'event_type': bus.MENU_MODEL_EVENT}
            ]
            }

action_tree = {'name': 'Main mode',
               'pauses_game': False,
               'actions': {
                   'b': {'action': Actions.BUILD,
                         'name': 'Building mode',
                         'selector': CROSSHAIR,
                         'submenu': {}},
                   'p': {'action': Actions.PUT,
                         'name': 'Object mode',
                         'selector': CROSSHAIR,
                         'submenu': objects_tree},
                   'r': {'action': Actions.ROOMS,
                         'name': 'Room mode',
                         'selector': FILLER,
                         'submenu': room_types},
                   's': {'type': 'menu',
                         'name': 'Buy supplies',
                         'menu_type': 'BuyMenu',
                         'content': supplies_menu},
                   'i': {'type': 'menu',
                         'name': 'Fix prices',
                         'menu_type': 'PricesMenu',
                         'content': prices_menu},
                   'o': {'type': 'menu',
                         'name': 'Order menu',
                         'menu_type': 'OrderMenu',
                         'content': order_menu},
                   't': {'type': 'menu',
                         'name': 'Task menu',
                         'menu_type': 'TaskMenu',
                         'content': task_menu},
                   'e': {'type': 'menu',
                         'name': 'Examine',
                         'menu_type': 'ExamineMenu',
                         'content': examine_menu},
                   'c': {'type': 'menu',
                         'name': 'Create brew',
                         'menu_type': 'NewBrewMenu',
                         'content': new_brew},
                   '?': {'type': 'menu',
                         'name': 'Get help',
                         'menu_type': 'Help',
                         'content': help_menu}
               }}

4e68bd65cbbf53a6018438a084c6d463ce416140
<mask token>


class Actions:
    <mask token>
    <mask token>
    <mask token>
    <mask token>


<mask token>

<mask token>


class Actions:
    BUILD = 0
    BUILD_COST = 10
    PUT = 1
    ROOMS = 2


<mask token>

<mask token>
CROSSHAIR = 0
FILLER = 1


class Actions:
    BUILD = 0
    BUILD_COST = 10
    PUT = 1
    ROOMS = 2


objects_tree = {'d': {'display': 'Door', 'subobject': door}, 'c': {
    'display': 'Chair', 'subobject': chair}, 't': {'display': 'Table',
    'subobject': table}, 'o': {'display': 'Counter', 'subobject': counter},
    'b': {'display': 'Beam', 'subobject': beam}, 'e': {'display': 'Bed',
    'subobject': bed}, 'v': {'display': 'Oven', 'subobject': oven}, 'a': {
    'display': 'Brewing vat', 'subobject': brewing_vat}, 'w': {'display':
    'Workstation', 'subobject': work_station}}
room_types = {'t': {'display': 'Tavern', 'subobject': Rooms.TAVERN}, 'b': {
    'display': 'Brewery', 'subobject': Rooms.BREWERY}, 's': {'display':
    'Storage', 'subobject': Rooms.STORAGE}, 'r': {'display': 'Inn room',
    'subobject': Rooms.ROOM}, 'k': {'display': 'Kitchen', 'subobject':
    Rooms.KITCHEN}}
main_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Tavern', 'children': [{'type': 'Button', 'x': 5, 'y': 1, 'text':
    'Start new game', 'event': {'action': 'new_game'}, 'event_type':
    MAIN_MENU_EVENT}, {'type': 'Button', 'x': 5, 'y': 2, 'text':
    'Load game', 'event': {'action': 'load_game'}, 'event_type':
    MAIN_MENU_EVENT}, {'type': 'Button', 'x': 5, 'y': 3, 'text':
    'Quit game', 'event': {'action': 'quit_game'}, 'event_type':
    MAIN_MENU_EVENT}]}
supplies_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Supplies', 'children': [{'type': 'StaticText', 'x': 1, 'y': 1,
    'content': 'Cash :'}, {'type': 'DynamicText', 'x': 20, 'y': 1, 'source':
    'cash'}, {'type': 'StaticText', 'x': 1, 'y': 2, 'content':
    'Storage room :'}, {'type': 'Ruler', 'x': 20, 'y': 2, 'source':
    'storage', 'selectable': False}, {'type': 'Line', 'x': 0, 'w': '100%',
    'y': 3}, {'type': 'Foreach', 'source': 'goods.supplies', 'do': [{'type':
    'StaticText', 'x': 5, 'eat_line': False}, {'type': 'DynamicText', 'x': 
    25, 'source_builder': 'price'}, {'type': 'NumberPicker', 'minimum': 1,
    'maximum': 100, 'x': 5, 'w': '80%'}]}]}
help_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Help', 'children': [{'type': 'Foreach', 'source': 'state', 'do': [{
    'type': 'DynamicText', 'x': 5, 'source_builder': 'key', 'eat_line': 
    False}, {'type': 'DynamicText', 'x': 20, 'source_builder': 'name'}]}]}
prices_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Prices', 'children': [{'type': 'Line', 'x': 0, 'w': '100%', 'y': 3}, {
    'type': 'Foreach', 'source': 'goods.supplies', 'do': [{'type':
    'StaticText', 'x': 5, 'eat_line': False}, {'type': 'NumberPicker',
    'minimum': 1, 'maximum': 100, 'x': 25, 'w': '80%'}]}]}
examine_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Examine', 'children': [{'type': 'DynamicText', 'x': 5, 'y': 2,
    'source': 'name'}, {'type': 'DynamicText', 'x': 25, 'y': 2, 'source':
    'level'}, {'type': 'DynamicText', 'x': 35, 'y': 2, 'source': 'race'}, {
    'type': 'DynamicText', 'x': 50, 'y': 2, 'source': 'class'}, {'type':
    'Line', 'x': 0, 'w': '100%', 'y': 3}, {'type': 'StaticText', 'x': 5,
    'y': 5, 'content': 'Money'}, {'type': 'DynamicText', 'x': 25, 'y': 5,
    'source': 'money'}, {'type': 'StaticText', 'x': 5, 'y': 6, 'content':
    'Thirst'}, {'type': 'DynamicText', 'x': 25, 'y': 6, 'source': 'thirst'},
    {'type': 'StaticText', 'x': 5, 'y': 7, 'content': 'Hunger'}, {'type':
    'DynamicText', 'x': 25, 'y': 7, 'source': 'hunger'}, {'type':
    'StaticText', 'x': 5, 'y': 8, 'content': 'Sleepiness'}, {'type':
    'DynamicText', 'x': 25, 'y': 8, 'source': 'sleep'}, {'type':
    'StaticText', 'x': 5, 'y': 11, 'content': 'Current activity'}, {'type':
    'DynamicText', 'x': 25, 'y': 11, 'source': 'activity'}, {'type':
    'Button', 'x': 25, 'y': 12, 'text': 'Recruit', 'event': 'recruit',
    'event_type': bus.MENU_MODEL_EVENT}]}
task_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Tasks', 'children': [{'type': 'Line', 'x': 0, 'w': '100%', 'y': 3}, {
    'type': 'Foreach', 'source': 'tasks', 'do': [{'type': 'StaticText',
    'source_getter': 'name', 'x': 5, 'eat_line': False}, {'type':
    'StaticText', 'source_getter': 'status', 'x': 30, 'eat_line': False}, {
    'type': 'StaticText', 'source_getter': 'owner', 'x': 50}]}]}
order_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Order', 'children': [{'type': 'Line', 'x': 0, 'w': '100%', 'y': 3}, {
    'type': 'Foreach', 'source': 'recipes.drinks', 'do': [{'type':
    'StaticText', 'x': 5, 'eat_line': False}, {'type': 'NumberPicker',
    'minimum': 1, 'maximum': 100, 'x': 20, 'w': '80%'}]}]}
new_brew = {'name': 'Create brew', 'template': 'centered 5', 'title':
    'Design a brew', 'children': [{'type': 'StaticText', 'content':
    'Grains', 'x': 2, 'w': '100%', 'y': 3}, {'type': 'List', 'x': 2, 'w':
    '30%', 'y': 5, 'source': 'grains'}, {'type': 'StaticText', 'content':
    'Aromas', 'x': 25, 'w': '100%', 'y': 3}, {'type': 'List', 'source':
    'aromas', 'x': 25, 'w': '30%', 'y': 5}, {'type': 'Checkbox', 'label':
    'Roast grains ?', 'source': 'roasted', 'x': 2, 'y': 10}, {'type':
    'StaticText', 'content': 'Name your brew : ', 'x': 2, 'y': 12}, {'type':
    'Input', 'x': 20, 'y': 12, 'source': 'name'}, {'type': 'Button', 'x': 
    20, 'y': 15, 'text': 'Create new brew', 'event': {'action':
    'create_brew'}, 'event_type': bus.MENU_MODEL_EVENT}]}
action_tree = {'name': 'Main mode', 'pauses_game': False, 'actions': {'b':
    {'action': Actions.BUILD, 'name': 'Building mode', 'selector':
    CROSSHAIR, 'submenu': {}}, 'p': {'action': Actions.PUT, 'name':
    'Object mode', 'selector': CROSSHAIR, 'submenu': objects_tree}, 'r': {
    'action': Actions.ROOMS, 'name': 'Room mode', 'selector': FILLER,
    'submenu': room_types}, 's': {'type': 'menu', 'name': 'Buy supplies',
    'menu_type': 'BuyMenu', 'content': supplies_menu}, 'i': {'type': 'menu',
    'name': 'Fix prices', 'menu_type': 'PricesMenu', 'content': prices_menu
    }, 'o': {'type': 'menu', 'name': 'Order menu', 'menu_type': 'OrderMenu',
    'content': order_menu}, 't': {'type': 'menu', 'name': 'Task menu',
    'menu_type': 'TaskMenu', 'content': task_menu}, 'e': {'type': 'menu',
    'name': 'Examine', 'menu_type': 'ExamineMenu', 'content': examine_menu},
    'c': {'type': 'menu', 'name': 'Create brew', 'menu_type': 'NewBrewMenu',
    'content': new_brew}, '?': {'type': 'menu', 'name': 'Get help',
    'menu_type': 'Help', 'content': help_menu}}}

from groggy.events import bus
from tavern.events.events import MAIN_MENU_EVENT
from tavern.world.objects.defaults import bed, door, chair, table, counter, beam, oven, work_station, brewing_vat
from tavern.world.objects.objects import Rooms
CROSSHAIR = 0
FILLER = 1


class Actions:
    BUILD = 0
    BUILD_COST = 10
    PUT = 1
    ROOMS = 2


objects_tree = {'d': {'display': 'Door', 'subobject': door}, 'c': {
    'display': 'Chair', 'subobject': chair}, 't': {'display': 'Table',
    'subobject': table}, 'o': {'display': 'Counter', 'subobject': counter},
    'b': {'display': 'Beam', 'subobject': beam}, 'e': {'display': 'Bed',
    'subobject': bed}, 'v': {'display': 'Oven', 'subobject': oven}, 'a': {
    'display': 'Brewing vat', 'subobject': brewing_vat}, 'w': {'display':
    'Workstation', 'subobject': work_station}}
room_types = {'t': {'display': 'Tavern', 'subobject': Rooms.TAVERN}, 'b': {
    'display': 'Brewery', 'subobject': Rooms.BREWERY}, 's': {'display':
    'Storage', 'subobject': Rooms.STORAGE}, 'r': {'display': 'Inn room',
    'subobject': Rooms.ROOM}, 'k': {'display': 'Kitchen', 'subobject':
    Rooms.KITCHEN}}
main_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Tavern', 'children': [{'type': 'Button', 'x': 5, 'y': 1, 'text':
    'Start new game', 'event': {'action': 'new_game'}, 'event_type':
    MAIN_MENU_EVENT}, {'type': 'Button', 'x': 5, 'y': 2, 'text':
    'Load game', 'event': {'action': 'load_game'}, 'event_type':
    MAIN_MENU_EVENT}, {'type': 'Button', 'x': 5, 'y': 3, 'text':
    'Quit game', 'event': {'action': 'quit_game'}, 'event_type':
    MAIN_MENU_EVENT}]}
supplies_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Supplies', 'children': [{'type': 'StaticText', 'x': 1, 'y': 1,
    'content': 'Cash :'}, {'type': 'DynamicText', 'x': 20, 'y': 1, 'source':
    'cash'}, {'type': 'StaticText', 'x': 1, 'y': 2, 'content':
    'Storage room :'}, {'type': 'Ruler', 'x': 20, 'y': 2, 'source':
    'storage', 'selectable': False}, {'type': 'Line', 'x': 0, 'w': '100%',
    'y': 3}, {'type': 'Foreach', 'source': 'goods.supplies', 'do': [{'type':
    'StaticText', 'x': 5, 'eat_line': False}, {'type': 'DynamicText', 'x': 
    25, 'source_builder': 'price'}, {'type': 'NumberPicker', 'minimum': 1,
    'maximum': 100, 'x': 5, 'w': '80%'}]}]}
help_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Help', 'children': [{'type': 'Foreach', 'source': 'state', 'do': [{
    'type': 'DynamicText', 'x': 5, 'source_builder': 'key', 'eat_line': 
    False}, {'type': 'DynamicText', 'x': 20, 'source_builder': 'name'}]}]}
prices_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Prices', 'children': [{'type': 'Line', 'x': 0, 'w': '100%', 'y': 3}, {
    'type': 'Foreach', 'source': 'goods.supplies', 'do': [{'type':
    'StaticText', 'x': 5, 'eat_line': False}, {'type': 'NumberPicker',
    'minimum': 1, 'maximum': 100, 'x': 25, 'w': '80%'}]}]}
examine_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Examine', 'children': [{'type': 'DynamicText', 'x': 5, 'y': 2,
    'source': 'name'}, {'type': 'DynamicText', 'x': 25, 'y': 2, 'source':
    'level'}, {'type': 'DynamicText', 'x': 35, 'y': 2, 'source': 'race'}, {
    'type': 'DynamicText', 'x': 50, 'y': 2, 'source': 'class'}, {'type':
    'Line', 'x': 0, 'w': '100%', 'y': 3}, {'type': 'StaticText', 'x': 5,
    'y': 5, 'content': 'Money'}, {'type': 'DynamicText', 'x': 25, 'y': 5,
    'source': 'money'}, {'type': 'StaticText', 'x': 5, 'y': 6, 'content':
    'Thirst'}, {'type': 'DynamicText', 'x': 25, 'y': 6, 'source': 'thirst'},
    {'type': 'StaticText', 'x': 5, 'y': 7, 'content': 'Hunger'}, {'type':
    'DynamicText', 'x': 25, 'y': 7, 'source': 'hunger'}, {'type':
    'StaticText', 'x': 5, 'y': 8, 'content': 'Sleepiness'}, {'type':
    'DynamicText', 'x': 25, 'y': 8, 'source': 'sleep'}, {'type':
    'StaticText', 'x': 5, 'y': 11, 'content': 'Current activity'}, {'type':
    'DynamicText', 'x': 25, 'y': 11, 'source': 'activity'}, {'type':
    'Button', 'x': 25, 'y': 12, 'text': 'Recruit', 'event': 'recruit',
    'event_type': bus.MENU_MODEL_EVENT}]}
task_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Tasks', 'children': [{'type': 'Line', 'x': 0, 'w': '100%', 'y': 3}, {
    'type': 'Foreach', 'source': 'tasks', 'do': [{'type': 'StaticText',
    'source_getter': 'name', 'x': 5, 'eat_line': False}, {'type':
    'StaticText', 'source_getter': 'status', 'x': 30, 'eat_line': False}, {
    'type': 'StaticText', 'source_getter': 'owner', 'x': 50}]}]}
order_menu = {'type': 'RootComponent', 'template': 'centered 5', 'title':
    'Order', 'children': [{'type': 'Line', 'x': 0, 'w': '100%', 'y': 3}, {
    'type': 'Foreach', 'source': 'recipes.drinks', 'do': [{'type':
    'StaticText', 'x': 5, 'eat_line': False}, {'type': 'NumberPicker',
    'minimum': 1, 'maximum': 100, 'x': 20, 'w': '80%'}]}]}
new_brew = {'name': 'Create brew', 'template': 'centered 5', 'title':
    'Design a brew', 'children': [{'type': 'StaticText', 'content':
    'Grains', 'x': 2, 'w': '100%', 'y': 3}, {'type': 'List', 'x': 2, 'w':
    '30%', 'y': 5, 'source': 'grains'}, {'type': 'StaticText', 'content':
    'Aromas', 'x': 25, 'w': '100%', 'y': 3}, {'type': 'List', 'source':
    'aromas', 'x': 25, 'w': '30%', 'y': 5}, {'type': 'Checkbox', 'label':
    'Roast grains ?', 'source': 'roasted', 'x': 2, 'y': 10}, {'type':
    'StaticText', 'content': 'Name your brew : ', 'x': 2, 'y': 12}, {'type':
    'Input', 'x': 20, 'y': 12, 'source': 'name'}, {'type': 'Button', 'x': 
    20, 'y': 15, 'text': 'Create new brew', 'event': {'action':
    'create_brew'}, 'event_type': bus.MENU_MODEL_EVENT}]}
action_tree = {'name': 'Main mode', 'pauses_game': False, 'actions': {'b':
    {'action': Actions.BUILD, 'name': 'Building mode', 'selector':
    CROSSHAIR, 'submenu': {}}, 'p': {'action': Actions.PUT, 'name':
    'Object mode', 'selector': CROSSHAIR, 'submenu': objects_tree}, 'r': {
    'action': Actions.ROOMS, 'name': 'Room mode', 'selector': FILLER,
    'submenu': room_types}, 's': {'type': 'menu', 'name': 'Buy supplies',
    'menu_type': 'BuyMenu', 'content': supplies_menu}, 'i': {'type': 'menu',
    'name': 'Fix prices', 'menu_type': 'PricesMenu', 'content': prices_menu
    }, 'o': {'type': 'menu', 'name': 'Order menu', 'menu_type': 'OrderMenu',
    'content': order_menu}, 't': {'type': 'menu', 'name': 'Task menu',
    'menu_type': 'TaskMenu', 'content': task_menu}, 'e': {'type': 'menu',
    'name': 'Examine', 'menu_type': 'ExamineMenu', 'content': examine_menu},
    'c': {'type': 'menu', 'name': 'Create brew', 'menu_type': 'NewBrewMenu',
    'content': new_brew}, '?': {'type': 'menu', 'name': 'Get help',
    'menu_type': 'Help', 'content': help_menu}}}

from groggy.events import bus
from tavern.events.events import MAIN_MENU_EVENT
from tavern.world.objects.defaults import (
    bed, door, chair, table, counter, beam, oven, work_station, brewing_vat)
from tavern.world.objects.objects import Rooms

CROSSHAIR = 0
FILLER = 1


class Actions:
    BUILD = 0
    BUILD_COST = 10
    PUT = 1
    ROOMS = 2

objects_tree = {'d': {'display': 'Door', 'subobject': door},
                'c': {'display': 'Chair', 'subobject': chair},
                't': {'display': 'Table', 'subobject': table},
                'o': {'display': 'Counter', 'subobject': counter},
                'b': {'display': 'Beam', 'subobject': beam},
                'e': {'display': 'Bed', 'subobject': bed},
                'v': {'display': 'Oven', 'subobject': oven},
                'a': {'display': 'Brewing vat', 'subobject': brewing_vat},
                'w': {'display': 'Workstation', 'subobject': work_station}}


room_types = {'t': {'display': 'Tavern', 'subobject': Rooms.TAVERN},
              'b': {'display': 'Brewery', 'subobject': Rooms.BREWERY},
              's': {'display': 'Storage', 'subobject': Rooms.STORAGE},
              'r': {'display': 'Inn room', 'subobject': Rooms.ROOM},
              'k': {'display': 'Kitchen', 'subobject': Rooms.KITCHEN}}

main_menu = {'type': 'RootComponent',
             'template': 'centered 5',
             'title': 'Tavern',
             'children': [
                 {'type': 'Button',
                  'x': 5,
                  'y': 1,
                  'text': 'Start new game',
                  'event': {'action': 'new_game'},
                  'event_type': MAIN_MENU_EVENT},
                 {'type': 'Button',
                  'x': 5,
                  'y': 2,
                  'text': 'Load game',
                  'event': {'action': 'load_game'},
                  'event_type': MAIN_MENU_EVENT},
                 {'type': 'Button',
                  'x': 5,
                  'y': 3,
                  'text': 'Quit game',
                  'event': {'action': 'quit_game'},
                  'event_type': MAIN_MENU_EVENT}]
             }


supplies_menu = {'type': 'RootComponent',
                 'template': 'centered 5',
                 'title': 'Supplies',
                 'children': [
                     {'type': 'StaticText',
                      'x': 1,
                      'y': 1,
                      'content': 'Cash :'},
                     {'type': 'DynamicText',
                      'x': 20,
                      'y': 1,
                      'source': 'cash'},
                     {'type': 'StaticText',
                      'x': 1,
                      'y': 2,
                      'content': 'Storage room :'},
                     {'type': 'Ruler',
                      'x': 20,
                      'y': 2,
                      'source': 'storage',
                      'selectable': False
                      },
                     {'type': 'Line',
                      'x': 0,
                      'w': '100%',
                      'y': 3},
                     {'type': 'Foreach',
                      'source': 'goods.supplies',
                      'do': [{'type': 'StaticText',
                              'x': 5,
                              'eat_line': False},
                             {'type': 'DynamicText',
                              'x': 25,
                              'source_builder': 'price'},
                             {'type': 'NumberPicker',
                              'minimum': 1,
                              'maximum': 100,
                              'x': 5,
                              'w': '80%'}]
                      }]}

help_menu = {'type': 'RootComponent',
             'template': 'centered 5',
             'title': 'Help',
             'children': [{'type': 'Foreach',
                           'source': 'state',
                           'do': [{'type': 'DynamicText',
                                   'x': 5,
                                   'source_builder': 'key',
                                   'eat_line': False},
                                  {'type': 'DynamicText',
                                   'x': 20,
                                   'source_builder': 'name'}]
                           }]}


prices_menu = {'type': 'RootComponent',
               'template': 'centered 5',
               'title': 'Prices',
               'children': [
                   {'type': 'Line',
                    'x': 0,
                    'w': '100%',
                    'y': 3},
                   {'type': 'Foreach',
                    'source': 'goods.supplies',
                    'do': [{'type': 'StaticText',
                            'x': 5,
                            'eat_line': False},
                           {'type': 'NumberPicker',
                            'minimum': 1,
                            'maximum': 100,
                            'x': 25,
                            'w': '80%'}]
                    }]}

examine_menu = {'type': 'RootComponent',
                'template': 'centered 5',
                'title': 'Examine',
                'children': [
                    {'type': 'DynamicText',
                     'x': 5,
                     'y': 2,
                     'source': 'name'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 2,
                     'source': 'level'},
                    {'type': 'DynamicText',
                     'x': 35,
                     'y': 2,
                     'source': 'race'},
                    {'type': 'DynamicText',
                     'x': 50,
                     'y': 2,
                     'source': 'class'},
                    {'type': 'Line',
                     'x': 0,
                     'w': '100%',
                     'y': 3},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 5,
                     'content': 'Money'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 5,
                     'source': 'money'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 6,
                     'content': 'Thirst'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 6,
                     'source': 'thirst'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 7,
                     'content': 'Hunger'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 7,
                     'source': 'hunger'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 8,
                     'content': 'Sleepiness'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 8,
                     'source': 'sleep'},
                    {'type': 'StaticText',
                     'x': 5,
                     'y': 11,
                     'content': 'Current activity'},
                    {'type': 'DynamicText',
                     'x': 25,
                     'y': 11,
                     'source': 'activity'},
                    {'type': 'Button',
                     'x': 25,
                     'y': 12,
                     'text': 'Recruit',
                     'event': 'recruit',
                     'event_type': bus.MENU_MODEL_EVENT}]}


task_menu = {'type': 'RootComponent',
             'template': 'centered 5',
             'title': 'Tasks',
             'children': [
                 {'type': 'Line',
                  'x': 0,
                  'w': '100%',
                  'y': 3},
                 {'type': 'Foreach',
                  'source': 'tasks',
                  'do': [{'type': 'StaticText',
                          'source_getter': 'name',
                          'x': 5,
                          'eat_line': False},
                         {'type': 'StaticText',
                          'source_getter': 'status',
                          'x': 30,
                          'eat_line': False,
                          },
                         {'type': 'StaticText',
                          'source_getter': 'owner',
                          'x': 50}]}
             ]
             }

order_menu = {'type': 'RootComponent',
              'template': 'centered 5',
              'title': 'Order',
              'children': [
                  {'type': 'Line',
                   'x': 0,
                   'w': '100%',
                   'y': 3},
                  {'type': 'Foreach',
                   'source': 'recipes.drinks',
                   'do': [{'type': 'StaticText',
                           'x': 5,
                           'eat_line': False},
                          {'type': 'NumberPicker',
                           'minimum': 1,
                           'maximum': 100,
                           'x': 20,
                           'w': '80%'}]}
              ]
              }


new_brew = {'name': 'Create brew',
            'template': 'centered 5',
            'title': 'Design a brew',
            'children': [
                {'type': 'StaticText',
                 'content': 'Grains',
                 'x': 2,
                 'w': '100%',
                 'y': 3,
                 },
                {'type': 'List',
                 'x': 2,
                 'w': '30%',
                 'y': 5,
                 'source': 'grains'
                 },
                {'type': 'StaticText',
                 'content': 'Aromas',
                 'x': 25,
                 'w': '100%',
                 'y': 3,
                 },
                {'type': 'List',
                 'source': 'aromas',
                 'x': 25,
                 'w': '30%',
                 'y': 5},
                {'type': 'Checkbox',
                 'label': 'Roast grains ?',
                 'source': 'roasted',
                 'x': 2,
                 'y': 10},
                {'type': 'StaticText',
                 'content': 'Name your brew : ',
                 'x': 2,
                 'y': 12},
                {'type': 'Input',
                 'x': 20,
                 'y': 12,
                 'source': 'name',
                 },
                {'type': 'Button',
                 'x': 20,
                 'y': 15,
                 'text': 'Create new brew',
                 'event': {'action': 'create_brew'},
                 'event_type': bus.MENU_MODEL_EVENT}
            ]
            }

action_tree = {'name': 'Main mode',
               'pauses_game': False,
               'actions': {
                   'b': {'action': Actions.BUILD,
                         'name': 'Building mode',
                         'selector': CROSSHAIR,
                         'submenu': {}},
                   'p': {'action': Actions.PUT,
                         'name': 'Object mode',
                         'selector': CROSSHAIR,
                         'submenu': objects_tree},
                   'r': {'action': Actions.ROOMS,
                         'name': 'Room mode',
                         'selector': FILLER,
                         'submenu': room_types},
                   's': {'type': 'menu',
                         'name': 'Buy supplies',
                         'menu_type': 'BuyMenu',
                         'content': supplies_menu},
                   'i': {'type': 'menu',
                         'name': 'Fix prices',
                         'menu_type': 'PricesMenu',
                         'content': prices_menu},
                   'o': {'type': 'menu',
                         'name': 'Order menu',
                         'menu_type': 'OrderMenu',
                         'content': order_menu},
                   't': {'type': 'menu',
                         'name': 'Task menu',
                         'menu_type': 'TaskMenu',
                         'content': task_menu},
                   'e': {'type': 'menu',
                         'name': 'Examine',
                         'menu_type': 'ExamineMenu',
                         'content': examine_menu},
                   'c': {'type': 'menu',
                         'name': 'Create brew',
                         'menu_type': 'NewBrewMenu',
                         'content': new_brew},
                   '?': {'type': 'menu',
                         'name': 'Get help',
                         'menu_type': 'Help',
                         'content': help_menu}
               }}
