#ifndef __metrics
#define __metrics

#include <stdint.h>
//#include "fonts/FreeSansBold18pt7b.trimmed.h"

class Metrics
{
  public:
    /*

      Small font
        Uses the built-in Adafruit GFX 5x8 font.

    */
    static constexpr const GFXfont* SmallFont = nullptr;
    static const uint8_t SmallFontTextSize = 1;

    static const uint16_t SmallFontBaseline = 0;
    static const uint16_t SmallFontHeight = 8;
    static const uint16_t SmallFontMaxHeight = Metrics::SmallFontHeight;


    /*

      Large font
        Originally used a trimmed version of the FreeSansBold 18pt font.
        Unfortunately due to program size constraints (I already ordered
        PCBs based on the ATMega328P) I'll use a scaled version of the
        built-in font for now.
    */
    static constexpr const GFXfont* LargeFont = nullptr;//&FreeSansBold18pt7bTrimmed;
    static const uint8_t LargeFontTextSize = 3;

    //static const uint16_t LargeFontBaseline = 25;
    //static const uint16_t LargeFontHeight = Metrics::LargeFontBaseline;
    //static const uint16_t LargeFontMaxHeight = 42;

    static const uint16_t LargeFontBaseline = 0;
    static const uint16_t LargeFontHeight = 24;
    static const uint16_t LargeFontMaxHeight = 24;


    /*

      Text line
        Defines the height of a standard line of text including margins.
        Suitable for applying a background color.

    */
    static const uint16_t LargeTextLineMargin = 7;
    static const uint16_t LargeTextLineYOffset = Metrics::LargeFontBaseline + Metrics::LargeTextLineMargin;
    static const uint16_t LargeTextLineHeight = (Metrics::LargeFontHeight + (2 * Metrics::LargeTextLineMargin));

    static const uint16_t SmallTextLineMargin = 7;
    static const uint16_t SmallTextLineHeight = (Metrics::SmallFontHeight + (2 * Metrics::SmallTextLineMargin));


    /*

      Arrows

    */
    static const uint16_t HArrowWidth = 10;
    static const uint16_t HArrowHeight = 20;

    static const uint16_t VArrowWidth = Metrics::HArrowHeight;
    static const uint16_t VArrowHeight = Metrics::HArrowWidth;

    static const uint16_t ArrowMargin = 8;

    static const uint16_t LargeTextLineHArrowYOffset = (Metrics::LargeTextLineHeight - Metrics::HArrowHeight) / 2;
    static const uint16_t LargeTextLineVArrowYOffset = (Metrics::LargeTextLineHeight - Metrics::VArrowHeight) / 2;



    /*

      Screen layout
        Shared amongst screens for a consistent layout

    */
    static const uint16_t MiddleLargeTextLineY = 100;
};

#endif