"""
uv-belichter-software - the DEMOS submenu
Copyright (C) 2024  Benjamin Burkhardt

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program.  If not, see <https://www.gnu.org/licenses/>.
"""

from gc import collect

# All the arguments this method takes are there for one reason: reduce the amount of libraries loaded into the picos memory and thus improving performance
# config: utils.Config object
# btn_mapping: a dict containing the btn mapping for the menu operation (given to the lcdMenu object)
# log: the utils.log function
# lcdMenu: the lcdMenu class (not an object of that class!)
def run(config, btn_mapping, log, lcdMenu):
    def lcd_driver_demo():
        import demos.lcd_driver_demo as ldd
        ldd.run(config.LCD)
        del ldd
        collect()
        return True
    def lcd_big_hello():
        import demos.lcd_big_hello as lbh
        lbh.run(config.LCD)
        del lbh
        collect()
        return True
    def input_tests():
        import demos.input_tests as it
        it.run(serial_output=False)
        del it
        collect()
        return True
    demo_menu = lcdMenu(config.LCD, btn_mapping, scroll_direction=True, cycle=True, hide_menu_name=False, name="DEMOS")
    demo_programs = [("LCD Demo", lcd_driver_demo),
                     ("Hello world", lcd_big_hello),
                     ("Input tests", input_tests),
                     ("Exit", demo_menu.stop)]
    demo_menu.setup(demo_programs)  # give it the callback list
    demo_menu.run()
    return True

if __name__ == "__main__":
    from utils import Config, log
    from lcdMenu import lcdMenu
    config = Config()
    btn_mapping = {"ok_btn": config.PIN_IN_BTN_1, "next_btn": config.PIN_IN_BTN_2}  # the btn mapping for all lcdMenus
    run(Config(), btn_mapping, log, lcdMenu)