#pragma once
#include <nlohmann/json.hpp>
#include <fstream>
#include <codecvt>

struct Config {
  nlohmann::json $config;
  std::string $src_path;

  Config(const std::string src_path);

  Config(nlohmann::json config, std::string src_path)
    : $config(config), $src_path(src_path) {}

  nlohmann::json &operator[](const std::string &key);
  nlohmann::json &json() { return $config; };
  std::wstring wstring(const std::string main_key, const std::string sub_key);
  std::vector<std::string> keys();
};