#ifndef COMMAND_LINE_PARSER_H_INCLUDED
#define COMMAND_LINE_PARSER_H_INCLUDED

#include <QCoreApplication>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include <QString>

class CommandLineParser : public QCommandLineParser {
    QString m_repositoryUrl;
    QString m_plugInDir;
    QString m_plugInName;
    QString m_workingDir;
    QString m_dryRun;
    QString m_noUpdatePsaHardware;
    QString m_showYoctoVersion;
    QString m_showYoctoInstallStatus;
    QString m_showExtendedVersion;
    QString m_iniFileName;
    QString m_alwaysDownloadConfig;
    QString m_alwaysDownloadDC;

    QCommandLineOption m_repositoryUrlOption;
    QCommandLineOption m_iniFileDirectoryOption;
    QCommandLineOption m_iniFileNameOption;
    QCommandLineOption m_pluginDirectoryOption;
    QCommandLineOption m_pluginNameOption;
    QCommandLineOption m_noDownloadOption;
    QCommandLineOption m_alwaysDownloadConfigOption;
    QCommandLineOption m_alwaysDownloadDCOption;
    QCommandLineOption m_workingDirectoryOption;
    QCommandLineOption m_dryRunOption;
    QCommandLineOption m_extendedVersionOption;
    QCommandLineOption m_yoctoVersionOption;
    QCommandLineOption m_yoctoInstallStatusOption;

    QCommandLineParser m_parser;

    void configure();

public:

    explicit CommandLineParser();
    ~CommandLineParser() = default;

    QCommandLineParser &parser() { return m_parser; }
    QCommandLineParser const &parser() const { return m_parser; }
    void process(const QCoreApplication &app) { m_parser.process(app); }
    QString const &iniFileName() const { return m_iniFileName; }
    void readSettings();
    QString repositoryUrl();
    QString plugInDir();
    QString plugInName();
    QString workingDir();
    bool dryRun();
    bool noUpdatePsaHardware();
    bool yoctoVersion();
    bool yoctoInstallStatus();
    bool extendedVersion();
    bool alwaysDownloadConfig();
    bool alwaysDownloadDC();
};
#endif // COMMAND_LINE_PARSER_H_INCLUDED