package acr.browser.lightning;

import android.content.SharedPreferences;
import android.os.Environment;

public class PreferenceManager {

	private static class Name {
		public static final String ADOBE_FLASH_SUPPORT = "enableflash";
		public static final String BLOCK_ADS = "AdBlock";
		public static final String BLOCK_IMAGES = "blockimages";
		public static final String CLEAR_CACHE_EXIT = "cache";
		public static final String COOKIES = "cookies";
		public static final String DOWNLOAD_DIRECTORY = "download";
		public static final String FULL_SCREEN = "fullscreen";
		public static final String HIDE_STATUS_BAR = "hidestatus";
		public static final String HOMEPAGE = "home";
		public static final String INCOGNITO_COOKIES = "incognitocookies";
		public static final String JAVASCRIPT = "java";
		public static final String LOCATION = "location";
		public static final String OVERVIEW_MODE = "overviewmode";
		public static final String POPUPS = "newwindows";
		public static final String RESTORE_LOST_TABS = "restoreclosed";
		public static final String SAVE_PASSWORDS = "passwords";
		public static final String SEARCH = "search";
		public static final String SEARCH_URL = "searchurl";
		public static final String SYSTEM_BROWSER_PRESENT = "SystemBrowser";
		public static final String TEXT_REFLOW = "textreflow";
		public static final String TEXT_SIZE = "textsize";
		public static final String URL_MEMORY = "memory";
		public static final String USE_WIDE_VIEWPORT = "wideviewport";
		public static final String USER_AGENT = "agentchoose";
		public static final String USER_AGENT_STRING = "userAgentString";
		public static final String GOOGLE_SEARCH_SUGGESTIONS = "GoogleSearchSuggestions";
		public static final String CLEAR_HISTORY_EXIT = "clearHistoryExit";
		public static final String CLEAR_COOKIES_EXIT = "clearCookiesExit";
		public static final String SAVE_URL = "saveUrl";
		public static final String RENDERING_MODE = "renderMode";
		public static final String SYNC_HISTORY = "syncHistory";
		public static final String BLOCK_THIRD_PARTY = "thirdParty";
		public static final String ENABLE_COLOR_MODE = "colorMode";
		public static final String URL_BOX_CONTENTS = "urlContent";
		public static final String INVERT_COLORS = "invertColors";
		public static final String READING_TEXT_SIZE = "readingTextSize";
		public static final String DARK_THEME = "darkTheme";
		public static final String DEFAULT_BOOKMARKS = "defaultBookmarks";

		public static final String USE_PROXY = "useProxy";
		public static final String USE_PROXY_HOST = "useProxyHost";
		public static final String USE_PROXY_PORT = "useProxyPort";
		public static final String INITIAL_CHECK_FOR_TOR = "checkForTor";
	}

	private static PreferenceManager mInstance;
	private static SharedPreferences mPrefs;

	private static final String PREFERENCES = "settings";

	public static PreferenceManager getInstance() {
		if (mInstance == null) {
			mInstance = new PreferenceManager();
		}
		return mInstance;
	}

	private PreferenceManager() {
		mPrefs = BrowserApp.getAppContext().getSharedPreferences(PREFERENCES, 0);
	}

	public boolean getAdBlockEnabled() {
		return mPrefs.getBoolean(Name.BLOCK_ADS, false);
	}

	public boolean getBlockImagesEnabled() {
		return mPrefs.getBoolean(Name.BLOCK_IMAGES, false);
	}

	public boolean getBlockThirdPartyCookiesEnabled() {
		return mPrefs.getBoolean(Name.BLOCK_THIRD_PARTY, false);
	}

	public boolean getCheckedForTor() {
		return mPrefs.getBoolean(Name.INITIAL_CHECK_FOR_TOR, false);
	}

	public boolean getClearCacheExit() {
		return mPrefs.getBoolean(Name.CLEAR_CACHE_EXIT, false);
	}

	public boolean getClearCookiesExitEnabled() {
		return mPrefs.getBoolean(Name.CLEAR_COOKIES_EXIT, false);
	}

	public boolean getClearHistoryExitEnabled() {
		return mPrefs.getBoolean(Name.CLEAR_HISTORY_EXIT, false);
	}

	public boolean getColorModeEnabled() {
		return mPrefs.getBoolean(Name.ENABLE_COLOR_MODE, false);
	}

	public boolean getCookiesEnabled() {
		return mPrefs.getBoolean(Name.COOKIES, true);
	}

	public boolean getDefaultBookmarks() {
		return mPrefs.getBoolean(Name.DEFAULT_BOOKMARKS, true);
	}

	public String getDownloadDirectory() {
		return mPrefs.getString(Name.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS);
	}

	public int getFlashSupport() {
		return mPrefs.getInt(Name.ADOBE_FLASH_SUPPORT, 0);
	}

	public boolean getFullScreenEnabled() {
		return mPrefs.getBoolean(Name.FULL_SCREEN, false);
	}

	public boolean getGoogleSearchSuggestionsEnabled() {
		return mPrefs.getBoolean(Name.GOOGLE_SEARCH_SUGGESTIONS, true);
	}

	public boolean getHideStatusBarEnabled() {
		return mPrefs.getBoolean(Name.HIDE_STATUS_BAR, false);
	}

	public String getHomepage() {
		return mPrefs.getString(Name.HOMEPAGE, Constants.HOMEPAGE);
	}

	public boolean getIncognitoCookiesEnabled() {
		return mPrefs.getBoolean(Name.INCOGNITO_COOKIES, false);
	}

	public boolean getInvertColors() {
		return mPrefs.getBoolean(Name.INVERT_COLORS, false);
	}

	public boolean getJavaScriptEnabled() {
		return mPrefs.getBoolean(Name.JAVASCRIPT, true);
	}

	public boolean getLocationEnabled() {
		return mPrefs.getBoolean(Name.LOCATION, false);
	}

	public String getMemoryUrl() {
		return mPrefs.getString(Name.URL_MEMORY, "");
	}

	public boolean getOverviewModeEnabled() {
		return mPrefs.getBoolean(Name.OVERVIEW_MODE, true);
	}

	public boolean getPopupsEnabled() {
		return mPrefs.getBoolean(Name.POPUPS, true);
	}

	public String getProxyHost() {
		return mPrefs.getString(Name.USE_PROXY_HOST, "localhost");
	}

	public int getProxyPort() {
		return mPrefs.getInt(Name.USE_PROXY_PORT, 8118);
	}

	public int getReadingTextSize() {
		return mPrefs.getInt(Name.READING_TEXT_SIZE, 2);
	}

	public int getRenderingMode() {
		return mPrefs.getInt(Name.RENDERING_MODE, 0);
	}

	public boolean getRestoreLostTabsEnabled() {
		return mPrefs.getBoolean(Name.RESTORE_LOST_TABS, true);
	}

	public String getSavedUrl() {
		return mPrefs.getString(Name.SAVE_URL, null);
	}

	public boolean getSavePasswordsEnabled() {
		return mPrefs.getBoolean(Name.SAVE_PASSWORDS, true);
	}

	public int getSearchChoice() {
		return mPrefs.getInt(Name.SEARCH, 1);
	}

	public String getSearchUrl() {
		return mPrefs.getString(Name.SEARCH_URL, Constants.GOOGLE_SEARCH);
	}

	public boolean getSyncHistoryEnabled() {
		return mPrefs.getBoolean(Name.SYNC_HISTORY, true);
	}

	public boolean getSystemBrowserPresent() {
		return mPrefs.getBoolean(Name.SYSTEM_BROWSER_PRESENT, false);
	}

	public boolean getTextReflowEnabled() {
		return mPrefs.getBoolean(Name.TEXT_REFLOW, false);
	}

	public int getTextSize() {
		return mPrefs.getInt(Name.TEXT_SIZE, 3);
	}

	public int getUrlBoxContentChoice() {
		return mPrefs.getInt(Name.URL_BOX_CONTENTS, 0);
	}

	public boolean getUseDarkTheme() {
		return mPrefs.getBoolean(Name.DARK_THEME, false);
	}

	public boolean getUseProxy() {
		return mPrefs.getBoolean(Name.USE_PROXY, false);
	}

	public int getUserAgentChoice() {
		return mPrefs.getInt(Name.USER_AGENT, 1);
	}

	public String getUserAgentString(String def) {
		return mPrefs.getString(Name.USER_AGENT_STRING, def);
	}

	public boolean getUseWideViewportEnabled() {
		return mPrefs.getBoolean(Name.USE_WIDE_VIEWPORT, true);
	}

	private void putBoolean(String name, boolean value) {
		mPrefs.edit().putBoolean(name, value).apply();
	}

	private void putInt(String name, int value) {
		mPrefs.edit().putInt(name, value).apply();
	}

	private void putString(String name, String value) {
		mPrefs.edit().putString(name, value).apply();
	}

	public void setAdBlockEnabled(boolean enable) {
		putBoolean(Name.BLOCK_ADS, enable);
	}

	public void setBlockImagesEnabled(boolean enable) {
		putBoolean(Name.BLOCK_IMAGES, enable);
	}

	public void setBlockThirdPartyCookiesEnabled(boolean enable) {
		putBoolean(Name.BLOCK_THIRD_PARTY, enable);
	}

	public void setCheckedForTor(boolean check) {
		putBoolean(Name.INITIAL_CHECK_FOR_TOR, check);
	}

	public void setClearCacheExit(boolean enable) {
		putBoolean(Name.CLEAR_CACHE_EXIT, enable);
	}

	public void setClearCookiesExitEnabled(boolean enable) {
		putBoolean(Name.CLEAR_COOKIES_EXIT, enable);
	}

	public void setClearHistoryExitEnabled(boolean enable) {
		putBoolean(Name.CLEAR_HISTORY_EXIT, enable);
	}

	public void setColorModeEnabled(boolean enable) {
		putBoolean(Name.ENABLE_COLOR_MODE, enable);
	}

	public void setCookiesEnabled(boolean enable) {
		putBoolean(Name.COOKIES, enable);
	}

	public void setDefaultBookmarks(boolean show) {
		putBoolean(Name.DEFAULT_BOOKMARKS, show);
	}

	public void setDownloadDirectory(String directory) {
		putString(Name.DOWNLOAD_DIRECTORY, directory);
	}

	public void setFlashSupport(int n) {
		putInt(Name.ADOBE_FLASH_SUPPORT, n);
	}

	public void setFullScreenEnabled(boolean enable) {
		putBoolean(Name.FULL_SCREEN, enable);
	}

	public void setGoogleSearchSuggestionsEnabled(boolean enabled) {
		putBoolean(Name.GOOGLE_SEARCH_SUGGESTIONS, enabled);
	}

	public void setHideStatusBarEnabled(boolean enable) {
		putBoolean(Name.HIDE_STATUS_BAR, enable);
	}

	public void setHomepage(String homepage) {
		putString(Name.HOMEPAGE, homepage);
	}

	public void setIncognitoCookiesEnabled(boolean enable) {
		putBoolean(Name.INCOGNITO_COOKIES, enable);
	}

	public void setInvertColors(boolean enable) {
		putBoolean(Name.INVERT_COLORS, enable);
	}

	public void setJavaScriptEnabled(boolean enable) {
		putBoolean(Name.JAVASCRIPT, enable);
	}

	public void setLocationEnabled(boolean enable) {
		putBoolean(Name.LOCATION, enable);
	}

	public void setMemoryUrl(String url) {
		putString(Name.URL_MEMORY, url);
	}

	public void setOverviewModeEnabled(boolean enable) {
		putBoolean(Name.OVERVIEW_MODE, enable);
	}

	public void setPopupsEnabled(boolean enable) {
		putBoolean(Name.POPUPS, enable);
	}

	public void setReadingTextSize(int size) {
		putInt(Name.READING_TEXT_SIZE, 2);
	}

	public void setRenderingMode(int mode) {
		putInt(Name.RENDERING_MODE, mode);
	}

	public void setRestoreLostTabsEnabled(boolean enable) {
		putBoolean(Name.RESTORE_LOST_TABS, enable);
	}

	public void setSavedUrl(String url) {
		putString(Name.SAVE_URL, url);
	}

	public void setSavePasswordsEnabled(boolean enable) {
		putBoolean(Name.SAVE_PASSWORDS, enable);
	}

	public void setSearchChoice(int choice) {
		putInt(Name.SEARCH, choice);
	}

	public void setSearchUrl(String url) {
		putString(Name.SEARCH_URL, url);
	}

	public void setSyncHistoryEnabled(boolean enable) {
		putBoolean(Name.SYNC_HISTORY, enable);
	}

	public void setSystemBrowserPresent(boolean available) {
		putBoolean(Name.SYSTEM_BROWSER_PRESENT, available);
	}

	public void setTextReflowEnabled(boolean enable) {
		putBoolean(Name.TEXT_REFLOW, enable);
	}

	public void setTextSize(int size) {
		putInt(Name.TEXT_SIZE, size);
	}

	public void setUrlBoxContentChoice(int choice) {
		putInt(Name.URL_BOX_CONTENTS, choice);
	}

	public void setUseDarkTheme(boolean use) {
		putBoolean(Name.DARK_THEME, use);
	}

	public void setUseProxy(boolean enable) {
		putBoolean(Name.USE_PROXY, enable);
	}

	public void setUserAgentChoice(int choice) {
		putInt(Name.USER_AGENT, choice);
	}

	public void setUserAgentString(String agent) {
		putString(Name.USER_AGENT_STRING, agent);
	}

	public void setUseWideViewportEnabled(boolean enable) {
		putBoolean(Name.USE_WIDE_VIEWPORT, enable);
	}
}
