package com.brucezee.jspider.selenium.extended;

import org.openqa.selenium.Platform;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.BrowserType;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by brucezee on 2017/1/12.
 */
public class ChromeDesiredCapabilities extends DesiredCapabilities {
    public static final String SETTING_VALUES_PREFIX = "profile.default_content_setting_values.";
    public static final String SETTING_VALUES_IMAGES = SETTING_VALUES_PREFIX + "images";
    public static final String SETTING_VALUES_JAVASCRIPT = SETTING_VALUES_PREFIX + "javascript";
    public static final String SETTING_VALUES_FLASH = SETTING_VALUES_PREFIX + "plugins";
    public static final String SETTING_VALUES_AUTOMATIC_DOWNLOADS = SETTING_VALUES_PREFIX + "automatic_downloads";
    public static final String SETTING_VALUES_GEOLOCATION = SETTING_VALUES_PREFIX + "geolocation";

    private Map<String, Object> prefs;
    private ChromeOptions options;

    public ChromeDesiredCapabilities() {
        super(BrowserType.ANDROID, "", Platform.ANDROID);

        prefs = new HashMap<String, Object>();
        options = new ChromeOptions();
        options.setExperimentalOption("prefs", prefs);
        setCapability(ChromeOptions.CAPABILITY, options);
    }

    public static ChromeDesiredCapabilities create() {
        return new ChromeDesiredCapabilities();
    }

    public Map<String, Object> getPrefs() {
        return prefs;
    }

    public ChromeOptions getOptions() {
        return options;
    }

    public void setJavascriptEnabled(boolean enabled) {
        super.setJavascriptEnabled(enabled);
        if (!enabled) {
            prefs.put(SETTING_VALUES_JAVASCRIPT, 2);
        } else {
            prefs.remove(SETTING_VALUES_JAVASCRIPT);
        }
    }

    public void setImagesEnabled(boolean enabled) {
        if (!enabled) {
            prefs.put(SETTING_VALUES_IMAGES, 2);
        } else {
            prefs.remove(SETTING_VALUES_IMAGES);
        }
    }

    public void setFlashEnabled(boolean enabled) {
        if (!enabled) {
            prefs.put(SETTING_VALUES_FLASH, 2);
        } else {
            prefs.remove(SETTING_VALUES_FLASH);
        }
    }

    public void setAutomaticDownloadsEnabled(boolean enabled) {
        if (!enabled) {
            prefs.put(SETTING_VALUES_AUTOMATIC_DOWNLOADS, 2);
        } else {
            prefs.remove(SETTING_VALUES_AUTOMATIC_DOWNLOADS);
        }
    }

    public void setGeoLocationEnabled(boolean enabled) {
        if (!enabled) {
            prefs.put(SETTING_VALUES_GEOLOCATION, 2);
        } else {
            prefs.remove(SETTING_VALUES_GEOLOCATION);
        }
    }

    public void setUserDataDir(String path) {
        options.addArguments("user-data-dir="+path);
    }

    public void setProxy(Proxy proxy) {
        setCapability("proxy", proxy);
    }

}