package tigerworkshop.webapphardwarebridge.services;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonReader;
import org.slf4j.LoggerFactory;
import tigerworkshop.webapphardwarebridge.responses.Setting;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class SettingService {
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SettingService.class.getName());
    private static final String SETTING_FILENAME = "setting.json";
    private static final String SETTING_FALLBACK_FILENAME = "setting.default.json";
    private static SettingService instance = new SettingService();
    private Setting setting = null;

    private SettingService() {
        load();
    }

    public static SettingService getInstance() {
        return instance;
    }

    public void load() {
        try {
            loadCurrent();
        } catch (Exception e) {
            try {
                loadDefault();
            } catch (Exception ex) {
                setting = new Setting();
            }
        }
    }

    public void loadCurrent() throws IOException {
        loadFile(SETTING_FILENAME);
    }

    public void loadDefault() throws IOException {
        loadFile(SETTING_FALLBACK_FILENAME);
    }

    private void loadFile(String filename) throws IOException {
        JsonReader reader = new JsonReader(new FileReader(filename));
        Gson gson = new Gson();
        setting = gson.fromJson(reader, Setting.class);
        reader.close();
    }

    public Setting getSetting() {
        return setting;
    }

    public void save() {
        try {
            Writer writer = new FileWriter(SETTING_FILENAME);
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            gson.toJson(setting, writer);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}