package tech.blueglacier.configuration;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.io.FilenameUtils;

import java.util.Properties;

public class AppConfig {

	private volatile static AppConfig objectInstance = null;

	private Configuration appConfig;
	private Properties charSetMap = null;

	private AppConfig() {
		try {
			this.appConfig = new XMLConfiguration(this.getClass().getClassLoader().getResource("conf/emailParserConfig.xml"));
		} catch (ConfigurationException e) {
			throw new RuntimeException(e);		
		}
	}

	public static AppConfig getInstance() {
		if (objectInstance == null) {
			synchronized (AppConfig.class) {
				if (objectInstance == null) {
					objectInstance = new AppConfig();
				}
			}
		}
		return objectInstance;
	}

	public Properties getCharSetMap() {
		if (charSetMap == null) {
			synchronized (AppConfig.class) {
				if (charSetMap == null) {
					charSetMap = new Properties();
					String[] arrStr = appConfig.getStringArray("appSettings.charSetFallback");
					for (int i = 0; i < arrStr.length; i++) {
						String temp = arrStr[i];
						String parentCharSet = temp.substring(temp.indexOf(':') + 1, temp.length());
						temp = temp.substring(0, temp.indexOf(':'));
						String[] arrChild = temp.split(",");
						for (int j = 0; j < arrChild.length; j++) {							
							charSetMap.setProperty(arrChild[j].toLowerCase(), parentCharSet);
						}
					}
				}
			}
		}
		return charSetMap;
	}

	public boolean isImageFormat(String fileName) {
		if (fileName != null && !fileName.isEmpty()) {
			String[] arrImageFormat = appConfig.getStringArray("appSettings.imageFileFormats");
			return FilenameUtils.isExtension(fileName.toLowerCase(), arrImageFormat);
		}
		return false;
	}	
}