#include <tee_internal_api.h>
#include "ta_tui_default.h"
#include <tui.h>
#include "process_requests.h"

#define TUI_CMD_SEND_RESOURCES  0
#define TUI_CMD_REGISTER_LABEL  1
#define TUI_CMD_START_TUI       2
#define TUI_CMD_START_TUI_LAND  3

extern TEE_TUIScreenLabel label;

TEE_Result TA_CreateEntryPoint(void)
{
    return TEE_SUCCESS;
}

void TA_DestroyEntryPoint(void)
{
}

TEE_Result TA_OpenSessionEntryPoint(uint32_t paramTypes,
                                          TEE_Param params[4],
                                          void **sessionContext)
{
    (void)paramTypes;
    (void)params;
    (void)sessionContext;
    TEE_MemFill(&label, 0, sizeof(TEE_TUIScreenLabel));

    return TEE_SUCCESS;
}

void TA_CloseSessionEntryPoint(void *sessionContext)
{
    (void)sessionContext;
    if (is_tui_started) {
        TEE_TUICloseSession();
        is_tui_started = false;
    }
}

TEE_Result TA_InvokeCommandEntryPoint(void *sessionContext,
                                              uint32_t commandID,
                                              uint32_t paramTypes,
                                              TEE_Param params[4])
{
    (void)sessionContext;
    (void)paramTypes;

    TEE_Result res = TEE_SUCCESS;

    switch (commandID) {
        case TUI_CMD_REGISTER_LABEL:
            res = process_reg_label(params);
            break;
        case TUI_CMD_START_TUI:
            res = process_start_tui();
            break;
        case TUI_CMD_START_TUI_LAND:
            res =  process_start_tui_land();
            break;
        default:
            res = TEE_ERROR_BAD_PARAMETERS;
            break;
    }

    return res;
}
