#pragma once

#include "try_engine/try_engine.hpp"
#include "rrr/content/content.hpp"
#include "rrr/utils/func.hpp"

namespace rrr::layers::gui
{
  // Все эти классы просто рисуют полученные у контента данные
  // Они не вычисляют ни чего, все вычисления делает контент (cnt)
  class navigation : public try_engine::layer
  {
    BASE_TYPE_DEFINE();

    public:
      CONSTRUCT_IMPL(navigation);

    public:
      BASE_OVERIDE_IMPL();

    public:
      SET_EVENT_MANAGER_IMPL();

    public:
      void set_content(content* c) { cnt = c; };

    private:
      FLAGS_STRUCT_DEFINED();

      bool show = true;
      bool freeze = false; // замораживает все действия, например при открытии диалогового окна
      event_manager* em;
      content* cnt;
      files* data;

      float width = 0.f;
      float height = 0.f;
      float pos_x = 0.f;
      float pos_y = 0.f;
      float padding_between_window = 2.f;

      const int STEP_UP = -1;
      const int STEP_DOWN = 1;
      file selected_file;

      // key options
      bool shift = false;
      int g_coutn = 0;

      // все что нужно для установки курсора при длинных списках 
      int current_position = 0; // позиция курсора относительно списка
      int cursor_position = 0; // позиция курсора относительно высоты экрана
      int delta = 0;
      enum class MOVE_DIRECTION { UP, DOWN };

    private:
      const ImVec4 dir_color = func::get_IMGUI_color<ImVec4>(91.f, 128.f, 191.f);
      const ImVec4 file_color = func::get_IMGUI_color<ImVec4>(186.f, 186.f, 186.f);
      const ImVec4 link_color = func::get_IMGUI_color<ImVec4>(51.f, 95.f, 165.f);

    private:
      void resize();
      void pressed(system_event& e);
      void released(system_event& e);
      void check_selected();
      void push_style(file&);
      void pop_style(file&);
      std::string get_file_content(file&);
      void set_delta(MOVE_DIRECTION);
      void set_scroll();
      void paste_from_copy(); // вставка после копирования
      void paste_from_cut();  // вставки после вырезания
      void detect_img();
  };
}

