package at.oefai.aaa;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.BackingStoreException;
import java.util.prefs.InvalidPreferencesFormatException;
import java.util.prefs.Preferences;


/**
 * Contains and manages the application preferences with static methods.
 * @author Stefan Rank
 */
final class AppPrefs {
    private static final String PREF_FILE_NAME = "aaaPrefs.xml";
    private static final Preferences PREFS;

    static {
        PREFS = Preferences.userNodeForPackage(new AppPrefs().getClass());
        try {
            Preferences.importPreferences(new FileInputStream(PREF_FILE_NAME));
        } catch (InvalidPreferencesFormatException ex) {
            Logger.getLogger("").logp(Level.WARNING, null, null, PREF_FILE_NAME + " is invalid", ex);
        } catch (IOException ex) {
            Logger.getLogger("").logp(Level.INFO, null, null, "IOException reading " + PREF_FILE_NAME, ex);
        }
    }

    private AppPrefs() {
        // dont allow instances
    }

    private static final String DEFAULT_FILE_LOCATION_KEY = "DEFAULT_FILE_LOCATION";
    public static String getDefaultFileLocation() {
        return PREFS.get(DEFAULT_FILE_LOCATION_KEY, "");
    }


    private static final String FRAME_HEIGHT_KEY = "FRAME_HEIGHT";
    public static int getFrameHeight() {
        return PREFS.getInt(FRAME_HEIGHT_KEY, 0);
    }

    public static void setFrameHeight(final int fh) {
        PREFS.putInt(FRAME_HEIGHT_KEY, fh);
    }

    private static final String FRAME_WIDTH_KEY = "FRAME_WIDTH";
    public static int getFrameWidth() {
        return PREFS.getInt(FRAME_WIDTH_KEY, 0);
    }

    public static void setFrameWidth(final int fw) {
        PREFS.putInt(FRAME_WIDTH_KEY, fw);
    }

    public static void save() {
        try {
            PREFS.exportSubtree(new FileOutputStream(PREF_FILE_NAME));
        } catch (BackingStoreException ex) {
            Logger.getLogger("").logp(Level.WARNING, null, null, "BackingStoreException writing prefs", ex);
        } catch (IOException ex) {
            Logger.getLogger("").logp(Level.WARNING, null, null, "Couldn't write " + PREF_FILE_NAME, ex);
        }
    }

}
