# Generates config file
import configparser
import json
import argparse
from pathlib import Path

def fix_description(desc):
    return "; " + desc.replace("\n", "\n; ")

def generate_ini(base_file, ini_file):
    """
    Generates .ini file from config-base file.
    """
    with open(Path(base_file), "r") as f:
        config_base = json.load(f)

    ini = configparser.RawConfigParser(allow_no_value=True)

    for section in config_base["sections"]:
        ini.add_section(section)
        if "meta" in config_base["sections"][section]:
            ini.set(section, fix_description(config_base["sections"][section]["meta"]["description"]))
        for entry in config_base["sections"][section]["settings"]:
            if "description" in config_base["sections"][section]["settings"][entry]:
                ini.set(section, fix_description(config_base["sections"][section]["settings"][entry]["description"]))
            value = config_base["sections"][section]["settings"][entry]["value"]
            if isinstance(value, bool):
                value = str(value).lower()
            else:
                value = str(value)
            ini.set(section, entry, value)

    with open(Path(ini_file), "w") as config_file:
        ini.write(config_file)
    return True


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-i", "--input", help="input config base from jf-accounts")
    parser.add_argument("-o", "--output", help="output ini")

    args = parser.parse_args()

    print(generate_ini(base_file=args.input, ini_file=args.output))