#ifndef __screen_calibrate
#define __screen_calibrate

#include "include/screenids.h"
#include "../screen.h"
#include "../control.h"


enum CalibrateStep : uint8_t
{
    CalibrateStepCurrent = 0,
    CalibrateStepMax,
    CalibrateStepMin,

    CalibrateStepCount
};


/*
 * Calibrate screen
 *   Configures the absolute height (calculates the offset) and
 *   the allowed minimum and maximum absolute height.
 */
class CalibrateScreen : public BaseScreen
{
  public:
    CalibrateScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseScreen(screenManager, display) { }

    void onShow();
    void onButton(Button button);
    void onTick();

    ScreenId screenId() { return ScreenId::Calibrate; };

  private:
    bool isValidHeight();
    void drawTitle();
    void drawSetHeight();

    CalibrateStep step = CalibrateStepCurrent;

    uint16_t height[CalibrateStepCount];
    uint16_t lastTextWidth = 0;
    uint8_t editingDigit = 0;
};

#endif
