#ifndef TOOLS_H
#define TOOLS_H

#include "devicepanel.h"
#include "program/progitem.h"
#include "device/ledcard.h"
#include <QApplication>
#include <QObject>
#include <QBrush>
#include <QColor>
#include <QTimer>
#include <QPushButton>
#include <QFileDialog>
#include <QImageReader>
#include <QTextEdit>
#include <QNetworkAccessManager>

const QString str0_9[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
extern QWidget *gMainWin;
extern DevicePanel *gDevicePanel;
extern QList<LedCard*> *gSelCards;
extern QTextEdit *gFdResInfo;
extern QString gFileHome;
extern QWidget *gProgEditorWin;
extern ProgItem *gProgItem;
extern QString css;

class Tools : public QObject {
    Q_OBJECT
public:
    static Tools* getInstance();
    static QNetworkAccessManager &netManager() {
        static QNetworkAccessManager manager;
        return manager;
    };
    static QRectF centerRect(qreal, qreal, int, int);
    static QString addSufix(QString);
    static void mergeFormat(QTextEdit *textEdit, const QTextCharFormat &format);
    static QString readErrStr(QImageReader::ImageReaderError);
    static QString fileMd5(QString);
    static void saveImg(const QString&, const QFontMetrics&, const QFont&, const QColor&, QJsonObject&, const QString&, const QString&);
    static void saveImg2(const QString&, const QFontMetrics&, const QFont&, const QColor&, QJsonArray&, const QString&, const QString&);
    static QColor int2Color(int value);
    static int color2Int(const QColor& color);
    static QBrush getBrush(const QColor& color);
    static QString selectStr(bool f, const QString &s0, const QString &s1 = "");
    ~Tools() {
        killTimer(timer_id);
    }
signals:
    void sTick();
protected:
    virtual void timerEvent(QTimerEvent *event);
private:
    Tools(QObject *parent = nullptr) : QObject(parent) {
        timer_id = startTimer(500, Qt::PreciseTimer);
    };
    int timer_id;
};

#endif // TOOLS_H