package OOXMLconvert;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

/**
 *
 * @author ferou
 */
public class Functions {
	
	/**
	 * Funkcia nájde domovský adresár a prípadne vytvorí adresár, kam sa budú ukladať nastavenia
	 * @return adresár s nastaveniami
	 */
	public static File getSettingsDirectory() {
		String userHome = System.getProperty("user.home");
		if (userHome == null) {
			throw new IllegalStateException("user.home==null");
		}
		File home = new File(userHome);
		File settingsDirectory = new File(home, ".ooxmlconvert");
		if (!settingsDirectory.exists()) {
			if(!settingsDirectory.mkdir()) {
				throw new IllegalStateException(settingsDirectory.toString());
			}
		}
		return settingsDirectory;
	}
	
	/**
	 * Funkcia číta vlastnosť uloženú v súbore s vlastnosťami.
	 * @param key kľúč vlastnosti
	 * @param defaultVal default hodnota, ktorá sa použije v prípade, že sa nepodarí prečítať vlastnosť s daným kľúčom
	 * @return vlastnosť s daným kľúčom, prípadne default hodnotu
	 */
	public static Object readLocalProperty(String key, String defaultVal) {
		try {
			String val = defaultVal;
			try {
				Properties ini = new Properties();
				File file = new File(Functions.getSettingsDirectory(),"ooxmlconvert.properties");
				if (!file.exists()) {
					file.createNewFile();
				}
				ini.load(new FileInputStream(file));
				val = ini.getProperty(key, defaultVal);
			}
			catch (Exception e) {
				System.err.println("Functions -> writeLocalProperty: " + e.toString());
			}
			return val;
		}
		catch (Exception e) {
			System.err.println("Functions -> writeLocalProperty: " + e.toString());
			return defaultVal;
		}
	}
  
	/**
	 * Funkcia zapisuje vlastnosť do súboru s vlastnosťami.
	 * @param key kľúč vlastnosti
	 * @param val hodnota vlastnosti
	 * @return <i>true</i> ak nenastala chyba, <i>false</i> inak
	 */
	public static boolean writeLocalProperty(String key, String val) {
		try {
			try {
				Properties ini = new Properties();
				File file = new File(Functions.getSettingsDirectory(),"ooxmlconvert.properties");
				if (!file.exists()) {
					file.createNewFile();
				}
				FileInputStream fis = new FileInputStream(file);
				ini.load(new FileInputStream(file));
				ini.setProperty(key, val);
				FileOutputStream fos = new FileOutputStream(file);
				ini.store(fos, "Settings");
				fis.close();
				fos.close();
			}
			catch (Exception e) {
				// noop
				System.err.println("Functions -> writeLocalProperty: " + e.toString());
			}
			return true;
		}
		catch (Exception e) {
			System.err.println("Functions -> writeLocalProperty: " + e.toString());
			return false;
		}
	}
  
	/**
	 * Funkcia konvertuje Object na integer.
	 * @param o Object na skonvertovanie
	 * @param defaultValue default hodnota
	 * @return číselná hodnota objektu
	 */
	public static int intValDef(Object o, int defaultValue) {
		try {
			return Integer.parseInt(o.toString());
		}
		catch (Exception e) {
			// noop
		}
		return defaultValue;
	}

}
