class Menu:
    name: str = ''
    nodes: list = []
    specials: list = []
    forward_button: str = ''
    backward_button: str = ''
    image_name: str = ''

    def __init__(self, name, nodes=[], specials=[], forward_button='', backward_button='', image_name='',
                 multiple_images=None):
        self.name = name
        self.nodes = nodes
        self.specials = specials
        self.forward_button = forward_button
        self.backward_button = backward_button
        self.image_name = image_name
        self.multiple_images = multiple_images
        if multiple_images is None:
            self.multiple_images = []

    def get_image(self):
        return self.name + '.png'


class MenuImage:
    def __init__(self, file_name, roi=None, threshold=0.9):
        self.file_name = file_name
        self.roi = roi if roi else []  # [y1, y2, x1, x2]
        self.threshold = threshold


ps4_graph = Menu('ps4_main', specials=['find_1 fifa_22', 'cross_until_connecting', 'need_sleep'], nodes=[
    Menu('home_main', specials=['find_1 play_main_active'], nodes=[
        Menu('play_main', specials=['find_1 ultimate_active', 'need_sleep'], nodes=[
            Menu('quick_play_modes'),
            Menu('volta_football'),
            Menu('ultimate_team', specials=['use_r1_and_l1', 'confirm_exit'],
                 multiple_images=['home', 'play', 'club'],
                 nodes=[
                     Menu('home', nodes=[
                         Menu('news'),
                         Menu('objectives'),
                         Menu('transfers', specials=['find_2 transfers_active'],
                              multiple_images=['transfer_market_active', 'transfer_list_active',
                                               'transfer_targets_active'],
                              nodes=[
                                  Menu('transfer_market',
                                       specials=['find_2 transfer_market_active 0.7', 'use_r1_and_l1'],
                                       multiple_images=['search_players', 'search_consumables', 'search_stadium',
                                                        'search_staff'],
                                       nodes=[
                                           Menu('search_players'),
                                           Menu('search_consumables'),
                                           Menu('search_stadium'),
                                           Menu('search_staff'),
                                       ]),
                                  Menu('transfer_list', multiple_images=['transfer_list_2'],
                                       specials=['find_2 transfer_list_active 0.7']),
                                  Menu('transfer_targets', specials=['find_2 transfer_targets_active 0.7']),
                              ]),
                         Menu('squad_building_challenges'),
                         Menu('store'),
                     ]),
                     Menu('play', nodes=[
                         Menu('moments'),
                         Menu('squad_battles', specials=['find_2 squad_battles_active'])
                     ]),
                     Menu('club', nodes=[
                         Menu('squad', specials=['no_need_check_second_state']),
                         Menu('stadium', specials=['find_2 stadium_active'], nodes=[
                             Menu('stadium_club', specials=['find_2 club_active']),
                             Menu('stadium_structure'),
                         ]),
                         Menu('player_stats'),
                         Menu('leaderboards'),
                         Menu('settings', nodes=[
                             Menu('play_time'),
                             Menu('delete_club'),
                         ]),

                     ]),
                 ])
        ])
    ])
])

xbox360_graph = Menu(
    'ps4_main',
    multiple_images=[
        MenuImage('ps4_main'),
        MenuImage('ps4_main_2'),
        MenuImage('brows_your_games', roi=[800, 1050, 0, 700]),
        MenuImage('brows_your_games_2', roi=[800, 1050, 0, 700]),
    ],
    nodes=[
        Menu(
            'games_and_apps',
            specials=['find_1 fifa_22', 'cross_until_connecting'],
            multiple_images=[MenuImage('games_and_apps', roi=[0, 300, 400, 1000])],
            nodes=[
                Menu(
                    'home_main',
                    specials=[
                        'find_1 ultimate_active',
                        'need_sleep',
                        'use_up_and_down',
                    ],
                    multiple_images=[
                        MenuImage('home_main', roi=[0, 300, 0, 400]),
                        MenuImage('ultimate_active', roi=[100, 900, 100, 500]),
                        MenuImage('ultimate_active_2', roi=[100, 900, 100, 500]),
                        MenuImage('ultimate_active_3', roi=[100, 900, 100, 500]),
                    ],
                    nodes=[
                        Menu(
                            'main_settings',
                            multiple_images=[MenuImage('main_settings')],
                            nodes=[
                                Menu('controller_settings', multiple_images=[MenuImage('controller_settings')])
                            ]
                        ),
                        Menu('fc_live', multiple_images=[MenuImage('fc_live')]),
                        Menu(
                            'ultimate_team',
                            specials=['use_r1_and_l1', 'confirm_exit'],
                            multiple_images=[
                                MenuImage('ultimate_team'),
                                MenuImage('news_active', roi=[800, 1000, 200, 1000]),
                                MenuImage('objectives_active', roi=[800, 1000, 200, 1000]),
                                MenuImage('play_active', roi=[800, 1000, 200, 1000]),
                                MenuImage('transfers_active', roi=[800, 1000, 200, 1000]),
                                MenuImage('store_active', roi=[800, 1000, 200, 1000]),
                                MenuImage('settings_active', roi=[800, 1000, 200, 1000])
                            ],
                            nodes=[
                                Menu(
                                    'news',
                                    specials=['find_2 news_active', 'use_r1_and_l1'],
                                    multiple_images=[
                                        MenuImage('news', roi=[800, 1000, 200, 1000]),
                                        MenuImage('my_messages_active', roi=[800, 1000, 200, 1000]),
                                        MenuImage('no_news_available')
                                    ],
                                    nodes=[
                                        Menu('my_messages', multiple_images=[
                                            MenuImage('my_messages', roi=[800, 1000, 200, 1000])
                                        ])
                                    ]
                                ),
                                Menu(
                                    'objectives',
                                    specials=['find_2 objectives_active'],
                                    multiple_images=[MenuImage('objectives')]
                                ),
                                Menu(
                                    'play',
                                    specials=['find_2 play_active', 'use_r1_and_l1'],
                                    multiple_images=[
                                        MenuImage('play'),
                                        MenuImage('rush_active', roi=[800, 1000, 200, 1000]),
                                        MenuImage('co_op_lobby_active', roi=[800, 1000, 200, 1000]),
                                        MenuImage('moments_active', roi=[800, 1000, 200, 1000]),
                                        MenuImage('squad_battles_active', roi=[800, 1000, 200, 1000])
                                    ],
                                    nodes=[
                                        Menu('rush', specials=['find_2 rush_active'],
                                             multiple_images=[MenuImage('rush')]),
                                        Menu('co_op_lobby', specials=['find_2 co_op_lobby_active'],
                                             multiple_images=[MenuImage('co_op_lobby')]),
                                        Menu(
                                            'moments',
                                            specials=['find_2 moments_active', 'dont_need_enter'],
                                            multiple_images=[MenuImage('moments', roi=[0, 300, 100, 1000])],
                                            nodes=[
                                                Menu(
                                                    'moments_star_gallery',
                                                    specials=['dont_need_enter', 'use_r1_and_l1'],
                                                    multiple_images=[
                                                        MenuImage('moments_star_gallery', roi=[0, 400, 0, 400]),
                                                        MenuImage('star_gallery_browse', roi=[0, 400, 0, 400]),
                                                        MenuImage('star_gallery_seasonal', roi=[0, 400, 0, 400])
                                                    ],
                                                    nodes=[
                                                        Menu('star_gallery_browse',
                                                             multiple_images=[MenuImage('star_gallery_browse', roi=[0, 400, 0, 400])]),
                                                        Menu('star_gallery_seasonal',
                                                             multiple_images=[MenuImage('star_gallery_seasonal', roi=[0, 400, 0, 400])])
                                                    ]
                                                ),
                                                Menu('moments_foundations', specials=['find_2 moments_foundations'],
                                                     multiple_images=[MenuImage('moments_foundations', roi=[0, 400, 0, 400])]),
                                                Menu('moments_milestones', specials=['find_2 moments_milestones'],
                                                     multiple_images=[MenuImage('moments_milestones', roi=[0, 400, 0, 400])]),
                                                Menu('moments_world_tour', specials=['find_2 moments_world_tour'],
                                                     multiple_images=[MenuImage('moments_world_tour', roi=[0, 400, 0, 400])])
                                            ]
                                        ),
                                        Menu(
                                            'squad_battles',
                                            specials=['find_2 squad_battles_active', 'dont_need_enter'],
                                            multiple_images=[MenuImage('squad_battles', roi=[0, 400, 0, 400])],
                                            nodes=[
                                                Menu('opponent_select',
                                                     multiple_images=[
                                                         MenuImage('opponent_select', roi=[0, 300, 100, 1000])
                                                     ]),
                                                Menu('your_rank',
                                                     multiple_images=[
                                                         MenuImage('your_rank', roi=[0, 300, 100, 1000]),
                                                         MenuImage('your_rank_2', roi=[0, 300, 100, 1000])
                                                     ])
                                            ]
                                        ),
                                        Menu('rivals', multiple_images=[MenuImage('rivals')]),
                                        Menu('champions', multiple_images=[MenuImage('champions')]),
                                        Menu('friendlies', multiple_images=[MenuImage('friendlies')]),
                                        Menu('online_draft', multiple_images=[MenuImage('online_draft')]),
                                        Menu('single_player_draft', multiple_images=[MenuImage('single_player_draft')])
                                    ]
                                ),
                                Menu(
                                    'club',
                                    specials=['use_r1_and_l1'],
                                    multiple_images=[MenuImage('club')],
                                    nodes=[
                                        Menu('squad', specials=['no_need_check_second_state'],
                                             multiple_images=[MenuImage('squad')]),
                                        Menu('evolutions', multiple_images=[MenuImage('evolutions')]),
                                        Menu(
                                            'stadium',
                                            specials=['find_2 stadium_active'],
                                            multiple_images=[MenuImage('stadium')],
                                            nodes=[
                                                Menu('stadium_club', specials=['find_1 club_active'],
                                                     multiple_images=[MenuImage('stadium_club')]),
                                                Menu('stadium_structure',
                                                     multiple_images=[MenuImage('stadium_structure')])
                                            ]
                                        ),
                                        Menu('player_stats', multiple_images=[MenuImage('player_stats')]),
                                        Menu('leaderboards', multiple_images=[MenuImage('leaderboards')]),
                                        Menu(
                                            'settings',
                                            multiple_images=[MenuImage('settings')],
                                            nodes=[
                                                Menu('play_time', multiple_images=[MenuImage('play_time')]),
                                                Menu('delete_club', multiple_images=[MenuImage('delete_club')])
                                            ]
                                        )
                                    ]
                                ),
                                Menu('squad_building_challenges',
                                     multiple_images=[MenuImage('squad_building_challenges', roi=[0, 200, 200, 1100])]),
                                Menu(
                                    'transfers',
                                    specials=['find_2 transfers_active', 'use_r1_and_l1'],
                                    multiple_images=[
                                        MenuImage('transfers', roi=[0, 200, 100, 500]),
                                        MenuImage('transfer_market_active', roi=[800, 1000, 200, 1000]),
                                        MenuImage('transfer_list_active', roi=[800, 1000, 200, 1000]),
                                        MenuImage('transfer_targets_active', roi=[800, 1000, 200, 1000])
                                    ],
                                    nodes=[
                                        Menu(
                                            'transfer_market',
                                            specials=['find_2 transfer_market_active 0.7', 'use_r1_and_l1',
                                                      'dont_need_enter'],
                                            multiple_images=[
                                                MenuImage('transfer_market'),
                                                MenuImage('search_players', roi=[200, 400, 100, 500]),
                                                MenuImage('search_consumables', roi=[200, 400, 100, 500]),
                                                MenuImage('search_stadium', roi=[200, 400, 100, 500]),
                                                MenuImage('search_staff', roi=[200, 400, 100, 500])
                                            ],
                                            nodes=[
                                                Menu('search_players', specials=['find_2 search_players'],
                                                     multiple_images=[MenuImage('search_players', roi=[200, 400, 100, 500])]),
                                                Menu('search_consumables', specials=['find_2 search_consumables'],
                                                     multiple_images=[MenuImage('search_consumables', roi=[200, 400, 100, 500])]),
                                                Menu('search_stadium', specials=['find_2 search_stadium'],
                                                     multiple_images=[MenuImage('search_stadium', roi=[200, 400, 100, 500])]),
                                                Menu('search_staff', specials=['find_2 search_staff'],
                                                     multiple_images=[MenuImage('search_staff', roi=[200, 400, 100, 500])])
                                            ]
                                        ),
                                        Menu(
                                            'transfer_list',
                                            specials=['find_2 transfer_list_active 0.7'],
                                            multiple_images=[
                                                MenuImage('transfer_list', roi=[0, 200, 100, 500]),
                                                MenuImage('transfer_list_2', roi=[250, 900, 100, 1800]),
                                                MenuImage('transfer_list_3', roi=[250, 900, 100, 1800]),
                                                MenuImage('compare_price_icon', roi=[950, 1050, 100, 1500]),
                                                MenuImage('compare_price_icon_2', roi=[950, 1050, 100, 1500]),
                                                MenuImage('add_to_transferlist', roi=[950, 1050, 100, 1500]),
                                                MenuImage('add_to_transferlist_2', roi=[950, 1050, 100, 1500])
                                            ]
                                        ),
                                        Menu(
                                            'transfer_targets',
                                            specials=['find_2 transfer_targets_active 0.75'],
                                            multiple_images=[
                                                MenuImage('transfer_targets', roi=[0, 200, 100, 500]),
                                                MenuImage('transfer_targets_empty', roi=[250, 900, 100, 1800]),
                                                MenuImage('transfer_targets_expired', roi=[250, 900, 100, 1800])
                                            ]
                                        )
                                    ]
                                ),
                                Menu('store', specials=['find_1 store_active 0.7'],
                                     multiple_images=[MenuImage('store')]),
                                Menu('settings', multiple_images=[MenuImage('settings')]),
                            ]
                        ),
                        Menu('manager_career', multiple_images=[MenuImage('manager_career')]),
                        Menu('player_career', multiple_images=[MenuImage('player_career')]),
                        Menu('clubs', multiple_images=[MenuImage('clubs')]),
                        Menu('volta_football', multiple_images=[MenuImage('volta_football')])
                    ]
                )
            ]
        )
    ]
)
