#pragma once
#include <bitset>

namespace attn
{

/** @brief configuration flags */
enum AttentionFlag
{
    enVital       = 0,
    enCheckstop   = 1,
    enTerminate   = 2,
    enBreakpoints = 3,
    lastFlag
};

/** @brief Objhects to hold configuration data */
class Config
{
  public: // methods
    /** @brief Default constructor */
    Config();

    /** @brief Default destructor */
    ~Config() = default;

    /** @brief Get state of flag */
    bool getFlag(AttentionFlag i_flag) const;

    /** @brief Set configuration flag */
    void setFlag(AttentionFlag i_flag);

    /** @brief Set all configuration flags */
    void setFlagAll();

    /** @brief Clear configuration flag */
    void clearFlag(AttentionFlag i_flag);

    /** @brief Clear all configuration flags */
    void clearFlagAll();

    /** @brief Set state of all configuration data */
    void setConfig(bool i_vital, bool i_checkstop, bool i_terminate,
                   bool i_breakpoints);

  private:
    std::bitset<lastFlag> iv_flags; // configuration flags
};

} // namespace attn