#include "loader.h"

#include <furi.h>
#include <furi-hal.h>
#include <cli/cli.h>

#include <gui/view_dispatcher.h>

#include <gui/modules/menu.h>
#include <gui/modules/submenu.h>

#include <applications.h>
#include <assets_icons.h>

#define LOADER_LOG_TAG "loader"

struct Loader {
    osThreadId_t loader_thread;
    FuriThread* thread;
    const FlipperApplication* current_app;
    string_t args;
    Cli* cli;
    Gui* gui;

    ViewDispatcher* view_dispatcher;
    Menu* primary_menu;
    Submenu* plugins_menu;
    Submenu* debug_menu;
    Submenu* settings_menu;

    size_t free_heap_size;
    osMutexId_t mutex;
    volatile uint8_t lock_semaphore;
};

typedef enum {
    LoaderMenuViewPrimary,
    LoaderMenuViewPlugins,
    LoaderMenuViewDebug,
    LoaderMenuViewSettings,
} LoaderMenuView;
