#ifndef TRACKER_PANEL_H_D675A54D
#define TRACKER_PANEL_H_D675A54D

#include <wx/wxprec.h>

#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif

#include <optional>
#include <set>
#include <string>

class AreaPopup;

class TrackerPanel : public wxPanel {
 public:
  TrackerPanel(wxWindow *parent);

  void UpdateIndicators();

  void SetPanelsMode();

  void SetSavedataPath(std::string savedata_path);

  bool IsPanelsMode() const { return panels_mode_; }

  const std::set<std::string> &GetSolvedPanels() const {
    return solved_panels_;
  }

 private:
  struct AreaIndicator {
    int area_id = -1;
    AreaPopup *popup = nullptr;
    int real_x1 = 0;
    int real_y1 = 0;
    int real_x2 = 0;
    int real_y2 = 0;
    bool active = true;
  };

  void OnPaint(wxPaintEvent &event);
  void OnMouseMove(wxMouseEvent &event);
  void OnRefreshSavedata(wxCommandEvent &event);

  void Redraw();

  void RefreshSavedata();

  wxImage map_image_;
  wxImage player_image_;
  wxBitmap rendered_;
  wxBitmap scaled_player_;

  int offset_x_ = 0;
  int offset_y_ = 0;
  double scale_x_ = 0;
  double scale_y_ = 0;

  std::vector<AreaIndicator> areas_;

  bool panels_mode_ = false;
  std::optional<std::string> savedata_path_;
  std::set<std::string> solved_panels_;
};

#endif /* end of include guard: TRACKER_PANEL_H_D675A54D */