#ifndef ATOOLS_Org_SettingsKeys_H
#define ATOOLS_Org_SettingsKeys_H

#include <string>
#include <vector>
#include <limits>

namespace ATOOLS {

  class Setting_Key {

  public:

    Setting_Key(size_t _index) :
      name{ "" },
      index{ _index }
    {};

    Setting_Key(const char* _name) : Setting_Key{ std::string{_name} } {}

    Setting_Key(const std::string& _name) :
      name{ _name },
      index{ std::numeric_limits<size_t>::max() }
    {};

    bool IsIndex() const;
    std::string GetName() const;
    size_t GetIndex() const;

    bool operator==(const Setting_Key&) const;

  private:

    std::string name;
    size_t index;

  };

  class Settings_Keys : public std::vector<Setting_Key> {

  public:

    Settings_Keys() {}

    using std::vector<Setting_Key>::vector;

    Settings_Keys(const std::vector<std::string>&);

    std::string Name() const;

    std::vector<std::string> IndizesRemoved() const;
    bool ContainsNoIndizes() const;

  };

}

#endif