#include <qdebug.h>
#include <qfile.h>
#include <QJsonParseError>
#include <QJsonObject>

#include "confighandler.h"
#include "logger.h"

QMap<QString, QVariant> ConfigHandler::_configMap;

void ConfigHandler::reader()
{
    // 检查文件是否已经存在
    if (QFile::exists(ConConfigFilePath)) {
        logde << "config file existed. ";
    }else{
        writer(false);
    }

    // 读取JSON文件
    QFile file(ConConfigFilePath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug()<<"file open failed.";
        return ;
    }

    // 解析JSON数据
    QJsonParseError error;
    QJsonDocument doc = QJsonDocument::fromJson(file.readAll(), &error);
    if (error.error != QJsonParseError::NoError) {
        qDebug() << "JSON解析错误:" << error.errorString();
        return ;
    }

    // 读取配置项
    QJsonObject obj = doc.object();

    _configMap[ConInstrumentCoefficientStr] = QVariant(obj[ConInstrumentCoefficientStr].toDouble());
}

#if 0
void ConfigHandler::createDefaultFile()
{
    logde<<"createDefaultFile";

    // 创建一个新的 JSON 对象
    QJsonObject obj;
    //    obj["name"] = "Alice";
    //    obj["age"] = 30;
    //    obj["city"] = "New York";

    double coefficient =
            ConfigHandler::ConDefaultMap.value(ConInstrumentCoefficientStr).toDouble();

    logde<<"coefficient:"<<coefficient;

    obj[ConInstrumentCoefficientStr] =coefficient;

    // 将 QJsonObject 转换为 QJsonDocument
    QJsonDocument doc(obj);

    // 打开文件进行写入，如果文件不存在则会自动创建文件
    QFile file(ConConfigFilePath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "无法打开文件进行写入!";
        return;
    }

    // 将 QJsonDocument 写入文件
    file.write(doc.toJson());
    file.close();  // 确保文件关闭
}
#endif

void ConfigHandler::writer(const bool writeRealDataFlag)
{
    QJsonObject obj;

    const  QMap<QString, QVariant> *mapPtr = &ConDefaultMap;
    if(writeRealDataFlag){
        mapPtr = &_configMap;
    }

    obj[ConInstrumentCoefficientStr] =
            (*mapPtr).value(ConInstrumentCoefficientStr).toFloat();

    // 将 QJsonObject 转换为 QJsonDocument
    QJsonDocument doc(obj);

    // 打开文件进行写入，如果文件不存在则会自动创建文件
    QFile file(ConConfigFilePath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "无法打开文件进行写入!";
        return;
    }

    // 将 QJsonDocument 写入文件
    file.write(doc.toJson());
    file.close();  // 确保文件关闭
}

