#pragma once
#include <QString>
#include <QWidget>
#include <QMap>
#include <QIcon>
#include <memory>

class IconLabel;
class QToolButton;
class QHBoxLayout;
class StatusChecker;

class ServerStatus: public QWidget
{
    Q_OBJECT
public:
    explicit ServerStatus(QWidget *parent = nullptr, Qt::WindowFlags f = 0);
    virtual ~ServerStatus();

public slots:
    void reloadStatus();
    void StatusChanged(const QMap<QString, QString> statuses);
    void StatusReloading(bool is_reloading);

private slots:
    void clicked();

private: /* methods */
    void addLine();
    void addStatus(QString key, QString name);
    void setStatus(QString key, int value);
private: /* data */
    QHBoxLayout * layout = nullptr;
    QToolButton *m_statusRefresh = nullptr;
    QMap<QString, IconLabel *> serverLabels;
    QIcon goodIcon;
    QIcon yellowIcon;
    QIcon badIcon;
    std::shared_ptr<StatusChecker> m_statusChecker;
};