#include "shared_context.h"
#include "ui_callbacks.h"
#include "common_ui.h"
#include "sign_message.h"

typedef enum { UI_191_POS_REVIEW, UI_191_POS_QUESTION, UI_191_POS_END } e_ui_191_position;

static uint8_t ui_pos;

static void dummy_pre_cb(void) {
    if (ui_pos == UI_191_POS_REVIEW) {
        question_switcher();
    } else {
        ux_flow_prev();
        ui_pos = UI_191_POS_REVIEW;
    }
}

static void dummy_post_cb(void) {
    if (ui_pos == UI_191_POS_QUESTION) {
        // temporarily disable button clicks, they will be re-enabled as soon as new data
        // is received and the page is redrawn with ux_flow_init()
        G_ux.stack[0].button_push_callback = NULL;
        continue_displaying_message();
    } else  // UI_191_END
    {
        ui_191_switch_to_message_end();
    }
}

// clang-format off
UX_STEP_NOCB(
    ux_191_step_review,
    pnn,
    {
      &C_icon_certificate,
      "Sign",
      "message",
    });
UX_STEP_NOCB(
    ux_191_step_message,
    bnnn_paging,
    {
      .title = "Message",
      .text = strings.tmp.tmp,
    });
UX_STEP_INIT(
    ux_191_step_dummy_pre,
    NULL,
    NULL,
    {
      dummy_pre_cb();
    });
UX_STEP_CB(
    ux_191_step_theres_more,
#ifdef TARGET_NANOS
    nn,
#else
    nnn,
#endif
    G_ux.stack[0].button_push_callback = NULL; // disable button clicks
    skip_rest_of_message(),
    {
#ifndef TARGET_NANOS
      "Press right to",
      "continue message",
#else
      "Press right to read",
#endif
      "Double-press to skip"
    });
UX_STEP_INIT(
    ux_191_step_dummy_post,
    NULL,
    NULL,
    {
      dummy_post_cb();
    });
UX_STEP_CB(
    ux_191_step_sign,
    pbb,
    io_seproxyhal_touch_signMessage_ok(),
    {
      &C_icon_validate_14,
      "Sign",
      "message",
    });
UX_STEP_CB(
    ux_191_step_cancel,
    pbb,
    io_seproxyhal_touch_signMessage_cancel(),
    {
      &C_icon_crossmark,
      "Cancel",
      "signature",
    });
// clang-format on

UX_FLOW(ux_191_flow,
        &ux_191_step_review,
        &ux_191_step_message,
        &ux_191_step_dummy_pre,
        &ux_191_step_theres_more,
        &ux_191_step_dummy_post,
        &ux_191_step_sign,
        &ux_191_step_cancel);

void ui_191_start(void) {
    ux_flow_init(0, ux_191_flow, NULL);
    ui_pos = UI_191_POS_REVIEW;
}

void ui_191_switch_to_message(void) {
    ux_flow_init(0, ux_191_flow, &ux_191_step_message);
    ui_pos = UI_191_POS_REVIEW;
}

void ui_191_switch_to_message_end(void) {
    // Force it to a value that will make it automatically do a prev()
    ui_pos = UI_191_POS_QUESTION;
    ux_flow_init(0, ux_191_flow, &ux_191_step_dummy_pre);
}

void ui_191_switch_to_sign(void) {
    ux_flow_init(0, ux_191_flow, &ux_191_step_sign);
    ui_pos = UI_191_POS_END;
}

void ui_191_switch_to_question(void) {
    ux_flow_init(0, ux_191_flow, &ux_191_step_theres_more);
    ui_pos = UI_191_POS_QUESTION;
}
