#include "RunHttpGet_getInfo.h"
#include <QDebug>
#include "../user/config.h"
extern config *pconfig;

RunHttpGet_getInfo::RunHttpGet_getInfo(InteractiveTask *task, QMutex *mutex)
    : RunAbstract(task, mutex)
{

}

void RunHttpGet_getInfo::run()
{

    QByteArray outData = InteractiveHttp::http_get_getInfo();
    // 关键调试输出
    qDebug() << "HTTP raw response:" << outData;
    InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();

    // 进行数据写操作
    QWriteLocker locker(&pSingletonData->m_dataCacheLock);
    // 如果数据发生改变，缓存信息
    if (!outData.isEmpty())
    {
        pSingletonData->m_roles.clear();
        pSingletonData->m_permissions.clear();
        QJsonParseError error;
        QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
        if (error.error == QJsonParseError::NoError)
        {
            if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
            {
                QJsonObject jsonObjRoot = jsonDoc.object();
                if(jsonObjRoot.contains("code") && jsonObjRoot.contains("user"))
                {
                    if (jsonObjRoot.value("code").toInt() == 200)
                    {
                        if (jsonObjRoot.value("user").isObject())
                        {
                            QJsonObject jsonObjUser = jsonObjRoot.value("user").toObject();
                            pconfig->userId = jsonObjUser.value("userId").toString();
                            // pconfig->username = jsonObjUser.value("userName").toString();
                            pSingletonData->m_userName = jsonObjUser.value("userName").toString();
                        }

                        if (jsonObjRoot.value("roles").isArray())
                        {
                            QJsonArray jsonArrRoles = jsonObjRoot.value("roles").toArray();
                            for (int i = 0; i < jsonArrRoles.size(); ++i)
                            {
                                QString jsonStrRole = jsonArrRoles.at(i).toString();
                                pSingletonData->m_roles.insert(jsonStrRole);
                            }
                        }

                        if (jsonObjRoot.value("permissions").isArray())
                        {
                            QJsonArray jsonArrPermissions = jsonObjRoot.value("permissions").toArray();
                            for (int i = 0; i < jsonArrPermissions.size(); ++i)
                            {
                                QString jsonStrPermission = jsonArrPermissions.at(i).toString();
                                pSingletonData->m_permissions.insert(jsonStrPermission);
                            }
                        }
                    }
                }
            }
        }
    }

}
