#pragma once
#include <QObject>
#include <QList>
#include <QNetworkReply>

#include "QObjectPtr.h"
#include "minecraft/auth/AccountData.h"
#include "AccountTask.h"

class AuthStep : public QObject {
    Q_OBJECT

public:
    using Ptr = shared_qobject_ptr<AuthStep>;

public:
    explicit AuthStep(AccountData *data);
    virtual ~AuthStep() noexcept;

    virtual QString describe() = 0;

public slots:
    virtual void perform() = 0;
    virtual void rehydrate() = 0;

signals:
    void finished(AccountTaskState resultingState, QString message);
    void showVerificationUriAndCode(const QUrl &uri, const QString &code, int expiresIn);
    void hideVerificationUriAndCode();

protected:
    AccountData *m_data;
};