package tourplaner.business;

import org.ini4j.Wini;

import java.io.File;
import java.io.IOException;

/**
 * Dient dem ein und auslesen von .ini Dateien
 */
public class ConfigHelper {

    public static final String standartConfig = "conf.ini"; // Config.ini befindet sich im Root Verzeichnis

    /**
     * Liest einen Int aus der Config aus
     * @param filename Speicherort
     * @param sectionName Sections Name
     * @param optionName Options Name
     * @return Den angeforderten String
     */
    public static int getIniInt(String filename, String sectionName, String optionName){
        Wini ini = null;
        try {
            ini = new Wini(new File(filename));
        } catch (IOException e) {
            LogHelper.error(e.getMessage(), e.getClass().getName());
        }
        assert ini != null;
        return ini.get(sectionName, optionName, int.class);
    }

    /**
     * Liest einen String aus der Config aus
     * @param filename Speicherort
     * @param sectionName Sections Name
     * @param optionName Options Name
     * @return Den angeforderten String
     */
    public static String getIniString(String filename, String sectionName, String optionName){
        Wini ini = null;
        try {
            ini = new Wini(new File(filename));
        } catch (IOException e) {
            LogHelper.error(e);
        }
        assert ini != null;
        return ini.get(sectionName, optionName, String.class);
    }

    /**
     * Liest einen String aus der Lang datei aus
     * Die Sprache wird im config file umgestellt
     * @param optionName Options Name
     * @return Den angeforderten String
     */
    public static String getLangIniString(String optionName){
        return ConfigHelper.getIniString(getIniString(getStandartConfig(), "lang", "lang") + ".ini", ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "lang", "lang"),optionName);
    }

    /**
     * Setzt ein String in der Config
     * @param filename Speicherort
     * @param sectionName Sections Name
     * @param optionName Options Name
     * @param value Wert der eingetragen werden soll
     */
    public static void setIniString(String filename, String sectionName, String optionName, String value) {
        Wini ini = null;
        try {
            ini = new Wini(new File(filename));
            ini.put(sectionName, optionName, value);
            ini.store();
        } catch (IOException e) {
            LogHelper.error(e.getMessage(), e.getClass().getName());
        }

    }

    /**
     * Setzt ein int in der Config
     * @param filename Speicherort
     * @param sectionName Sections Name
     * @param optionName Options Name
     * @param value Wert der eingetragen werden soll
     */
    public static void setIniInt(String filename, String sectionName, String optionName, int value){
        Wini ini = null;
        try {
            ini = new Wini(new File(filename));
            ini.put(sectionName, optionName, value);
            ini.store();
        } catch (IOException e) {
            LogHelper.error(e);
        }
    }

    /**
     * Gibt den namen des standard Config file zurück
     * @return Name des standard config files
     */
    public static String getStandartConfig() {
        return standartConfig;
    }
}
