#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
