#pragma once

#include <QObject>
#include <QStringList>
#include <QVariantMap>
#include <QVariantList>
#include <QtConcurrent/QtConcurrent>

class MyWebHandler : public QObject
{
    Q_OBJECT
        //Q_PROPERTY(QString nativeText READ nativeText MEMBER m_nativeText NOTIFY signalNativeTextChanged FINAL)

public:
    explicit MyWebHandler(QObject* parent = nullptr)
    {
    }

    QString nativeText() const { return nativeText_; }


signals:
    //在C++中定义的信号，可以在JS端监听此信号接收消息
    void signalNativeTextChanged(const QString& text);

    void signalReadFileFinished(const QString& text);

    void signalLongin(const QString& username, const int& ecode);

    void signalLonout();

public slots:
    //C++ 端的公共槽函数，可以在JS端调用。
    void setNativeText(const QString& text);

    void log(const QString& text);

    QString readFile(const QString& filename);


    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 登录，返回用户信息
    void login(const QString& username, const QString& password);
    // 登出
    void loginOut(const QString& username);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 用户管理接口
    QVariantMap queryUserList(int page, int pageSize);
    int insertUser(QVariantMap params);
    int deleteUser(const QString& userId);
    int updateUser(const QString& userId, QVariantMap params);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 角色管理接口 ===
    /**
    * 查询角色列表, pageSize !=0 时分页查询
    * @param [int page]: 当前的页码
    * @param [int pageSize]: 一页的数据条数，0: 不分页; >0: 分页
    */
    QVariantMap queryRoleList(int page, int pageSize);
    int insertRole(QVariantMap params);
    int deleteRole(const QString& roleId);
    int updateRole(const QString& roleId, QVariantMap params);

    QVariantList queryRolePermissionList(int roleId);
    int updateRolePermission(int roleId, QVariantList params);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 权限管理接口
    QVariantMap queryPermissionList(int page, int pageSize);
    int insertPermission(QVariantMap params);
    int deletePermission(const QString& permissionId);
    int updatePermission(const QString& permissionId, QVariantMap params);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 设备管理接口
    QVariantMap queryDeviceList(int page, int pageSize);

    QVariantList queryDevice(QVariantMap params);
    int insertDevice(QVariantMap params);
    int deleteDevice(const QString& deviceId);
    int updateDevice(const QString& deviceId, QVariantMap params);
    QVariantList queryDeviceTypeList();

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 计费管理接口
    QVariantMap queryPriceList(int page, int pageSize);
    int insertPrice(QVariantMap params);
    int deletePrice(const QString& priceId);
    int updatePrice(const QString& priceId, QVariantMap params);
    QVariantList queryPriceTypeList();

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 策略管理接口
    QVariantMap queryPolicyList(int page, int pageSize);
    int insertPolicy(QVariantMap params);
    int deletePolicy(const QString& policyId);
    int updatePolicy(const QString& policyId, QVariantMap params);
    QVariantList queryPolicyTypeList();

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 系统日志接口
    QVariantMap querySyslogList(int page, int pageSize);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 安全策略 ===
    QVariantMap querySecPolicyList(int page, int pageSize);
    int insertSecPolicy(QVariantMap params);
    int updateSecPolicy(const QString& policyId, QVariantMap params);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 安全日志记录 ===
    QVariantMap querySecRecordList(int page, int pageSize);
    int insertSecRecord(QVariantMap params);
    int updateSecRecord(const QString& policyId, QVariantMap params);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    QVariantList getDeviceInfo(const QVariantList& types);

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 环境信息 ===
    QVariantMap getEnvironmentInfo();
    QVariantMap getFireInfo();

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// === 统计信息 ===
    // 获取累计统计数据
    QVariantMap getStatisticTotal();
    // 获取按天统计数据
    QVariantList getStatisticDay(const QString& startDate, int nday=7);
    // 获取一天的发电功率
    QVariantList getStatisticPowerDay();
    // 获取一天的辐照度
    QVariantList getStatisticIrradianceDay();

    QVariantList getCurveDataDay(int a, int b);

public:
    QString nativeText_;
};
