#include "NVMParameterBase.h"
#include "fsfw/memory/HasFileSystemIF.h"
#include "fsfw/serviceinterface/ServiceInterface.h"

#include <fstream>

NVMParameterBase::NVMParameterBase(std::string fullName): fullName(fullName) {
}

ReturnValue_t NVMParameterBase::readJsonFile() {
    if(std::filesystem::exists(fullName)) {
        // Read JSON file content into object
        std::ifstream i(fullName);
        i >> json;
        return HasReturnvaluesIF::RETURN_OK;
    }
    return HasFileSystemIF::FILE_DOES_NOT_EXIST;
}

ReturnValue_t NVMParameterBase::writeJsonFile() {
    std::ofstream o(fullName);
    o << std::setw(4) << json;
    return HasReturnvaluesIF::RETURN_OK;
}

void NVMParameterBase::setFullName(std::string fullName) {
    this->fullName = fullName;
}

std::string NVMParameterBase::getFullName() const {
    return fullName;
}

bool NVMParameterBase::getJsonFileExists() {
    return std::filesystem::exists(fullName);
}

void NVMParameterBase::printKeys() const {
    sif::info << "Printing keys for JSON file " << fullName << std::endl;
    for(const auto& key: keys) {
        sif::info << key << std::endl;
    }
}

void NVMParameterBase::print() const {
    sif::info << "Printing JSON file " << fullName << std::endl;
    for(const auto& key: keys) {
        sif::info << key << ": " << json[key] << std::endl;
    }
}