#include <Inkplate-LVGL.h>

Inkplate inkplate(INKPLATE_1BIT);

static lv_obj_t *screen_menu = NULL;
static lv_obj_t *screen_detail = NULL;
uint32_t loop_time = 0;

static void open_detail_cb(lv_event_t *e) {
  
  Serial.println("Detail button clicked");
  lv_obj_invalidate(lv_screen_active());
  inkplate.clearDisplay();
  lv_screen_load(screen_detail);
  lv_timer_handler();
  inkplate.display();
}

static void back_to_menu_cb(lv_event_t *e) {
  Serial.println("Back button clicked");
  lv_obj_invalidate(lv_screen_active());
  inkplate.clearDisplay();
  lv_screen_load(screen_menu);
  lv_timer_handler();
  inkplate.display();
}

static void build_menu_screen() {
  
  screen_menu = lv_obj_create(NULL);

  lv_obj_t *title = lv_label_create(screen_menu);
  lv_label_set_text(title, "My e-reader");
  lv_obj_set_style_text_font(title,  &lv_font_montserrat_48, 0);
  lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 20);

  lv_obj_t *btn = lv_btn_create(screen_menu);
  lv_obj_set_size(btn, 200, 60);
  lv_obj_center(btn);
  lv_obj_add_event_cb(btn, open_detail_cb, LV_EVENT_CLICKED, NULL);

  lv_obj_t *btn_label = lv_label_create(btn);
  lv_label_set_text(btn_label, "Get details");
  lv_obj_center(btn_label);

}

static void build_detail_screen() {
    screen_detail = lv_obj_create(NULL);

    lv_obj_t *text = lv_label_create(screen_detail);
    lv_label_set_text(text, "This is where reader content will go.");
    lv_obj_center(text);

    lv_obj_t *back = lv_obj_create(screen_detail);
    lv_obj_set_size(back, 120, 50);
    lv_obj_align(back, LV_ALIGN_TOP_LEFT, 20, 20);
    lv_obj_add_event_cb(back, back_to_menu_cb, LV_EVENT_CLICKED, NULL);
    lv_obj_set_style_border_color(back, lv_color_hex(0x000000), 0);

    lv_obj_t *back_label = lv_label_create(back);
    lv_label_set_text(back_label, "< Back");
    lv_obj_center(back_label);
}

void setup() {

  Serial.begin(115200); // Standard speed for Inkplate examples

  inkplate.begin(LV_DISPLAY_RENDER_MODE_FULL);
  inkplate.clearDisplay();

  if (inkplate.touchscreen.init(true))
  {
      Serial.println("Touchscreen initialized.");
  }
  else
  {
      Serial.println("Touchscreen initialization failed.");
      while (true);
  }

  build_menu_screen();
  build_detail_screen();

  lv_screen_load(screen_menu);
  lv_timer_handler();
  inkplate.display();

}

void loop() {
  
  lv_timer_handler();
  delay(5);

}
