#ifndef UPDATE_COMMAND_H_INCLUDED
#define UPDATE_COMMAND_H_INCLUDED

#include "process/command.h"

class Worker;
class UpdateCommand : public Command {
    int m_nextCommandIndex{0};
public:

    static constexpr const char *UPDATE_NOT_NECESSARY{"not necessary"};
    static constexpr const char *UPDATE_NOT_REQUESTED{"not requested"};
    static constexpr const char *UPDATE_REQUESTED{"requested"};
    static constexpr const char *NO_CUSTOMER_REPOSITORY{"no customer repository"};
    static constexpr const char *ISMAS_CONNECTED{"connected"};
    static constexpr const char *ISMAS_NOT_CONNECTED{"not connected"};
    static constexpr const char *ISMAS_CONNECTION_IN_PROGRESS{"connecting"};
    static constexpr const char *GIT_CUSTOMER_REPO_UP_TO_DATE{"up to date"};
    static constexpr const char *EXEC_OPKG_COMMANDS_SUCCESS{"success"};
    static constexpr const char *UPDATE_DC_JSON_FILES_SUCCESS{"success"};
    static constexpr const char *SYNC_CUSTOMER_REPO_FILES_SUCCESS{"success"};
    static constexpr const char *UPDATE_DC_FIRMARE_SUCCESS{"success"};

    explicit UpdateCommand(QString const &command,
                           Worker *worker,
                           int nextCommandIndex,
                           int start_timeout = 100000,
                           int finish_timeout = 100000);

    int nextCommandIndex() { return m_nextCommandIndex; }

    virtual bool stopUpdateOnFailure();

public slots:
    virtual void finished(int exitCode, QProcess::ExitStatus exitStatus) override;
};

#endif // UPDATE_COMMAND_H_INCLUDED