#ifndef OPTIONS_H
#define OPTIONS_H

#include <QStringList>

/*! \brief A single option which is listed in Options */
class Option {
  public:
    /*! Types of options */
    enum Type {
        Switch, //!< No paramater
        String  //!< Parameter is a string
    };

    Option();
    Option(const QString &, const Type &, const QString &, const QString &);
    void set(const QString &, const Type &, const QString &, const QString &);
    QString getName();
    QString getShort();
    QString getLong();
    Type getType();
    void setArg(const QString &);
    QString getArg();
    void setActive(bool b = true);
    bool isActive();

  private:
    QString name;
    Type type;
    QString sName;
    QString lName;
    QString sarg;
    bool active;
};

/*! \brief Simple class to deal with command line options */

class Options {
  public:
    Options();
    int parse();
    void add(Option);
    void add(const QString &, const Option::Type &, const QString &,
             const QString &);
    void setHelpText(const QString &);
    QString getHelpText();
    QString getProgramName();
    QStringList getFileList();
    bool isActive(const QString &);
    void setActive(const QString &, bool b);
    QString getArg(const QString &);

  private:
    QString progname;
    QString helptext;
    QStringList filelist;
    QList<Option> optlist;
};

#endif
