#include "config.h"
#include <filesystem>

namespace fs = std::filesystem;

bool ConfigIni::set_work_exe(const std::string& dir)
{
    work_dir_ = dir;

    auto ini_path = fs::path(work_dir_).parent_path().append("xmlopr.ini");
    if (!fs::exists(ini_path)) {
        return false;
    }
    ini_path_ = ini_path.string();

    if (!parse_ini()) {
        return false;
    }
    return true;
}

bool ConfigIni::set_xml_path(const std::string& path)
{
    if (ini_.IsEmpty()) {
        return false;
    }
    ini_.SetValue("Basic", "xml_path", path.c_str());
    if (!ini_.SaveFile(ini_path_.c_str()) != SI_OK) {
        return false;
    }
    return true;
}

OprBase ConfigIni::get_config()
{
    return opr_base_;
}

bool ConfigIni::parse_ini()
{
    if (ini_.LoadFile(ini_path_.c_str()) != SI_OK) {
        return false;
    }
    ini_.SetUnicode();
    opr_base_.node_path = ini_.GetValue("Basic", "oper_node");
    opr_base_.purpose = ini_.GetValue("Basic", "purpose");
    opr_base_.the_node = ini_.GetValue("Basic", "the_node");
    opr_base_.xml_path = ini_.GetValue("Basic", "xml_path");
    return true;
}