package de.blinkt.openvpn;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.SwitchPreference;

public class Settings_IP extends PreferenceFragment implements OnPreferenceChangeListener {
		private EditTextPreference mIPv4;
		private EditTextPreference mIPv6;
		private SwitchPreference mUsePull;
		private CheckBoxPreference mOverrideDNS;
		private EditTextPreference mSearchdomain;
		private EditTextPreference mDNS1;
		private EditTextPreference mDNS2;
		private EditTextPreference mCustomRoutes;
		private CheckBoxPreference mUseDefaultRoute;
		private VpnProfile mProfile;
		private CheckBoxPreference mRouteNoPull;

		@Override
		public void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			
			String profileUUID = getArguments().getString(getActivity().getPackageName() + ".profileUUID");
			mProfile = ProfileManager.get(profileUUID);

			
			// Make sure default values are applied.  In a real app, you would
			// want this in a shared function that is used to retrieve the
			// SharedPreferences wherever they are needed.
			PreferenceManager.setDefaultValues(getActivity(),
					R.xml.vpn_ipsettings, false);
			
			// Load the preferences from an XML resource
			addPreferencesFromResource(R.xml.vpn_ipsettings);
			mIPv4 = (EditTextPreference) findPreference("ipv4_address");
			mIPv6 = (EditTextPreference) findPreference("ipv6_address");
			mUsePull = (SwitchPreference) findPreference("usePull");
			mOverrideDNS = (CheckBoxPreference) findPreference("overrideDNS");
			mSearchdomain =(EditTextPreference) findPreference("searchdomain");
			mDNS1 = (EditTextPreference) findPreference("dns1");
			mDNS2 = (EditTextPreference) findPreference("dns2");
			mCustomRoutes = (EditTextPreference) findPreference("customRoutes");
			mUseDefaultRoute = (CheckBoxPreference) findPreference("useDefaultRoute");
			mRouteNoPull = (CheckBoxPreference) findPreference("routenopull");

			mIPv4.setOnPreferenceChangeListener(this);
			mIPv6.setOnPreferenceChangeListener(this);
			mDNS1.setOnPreferenceChangeListener(this);
			mDNS2.setOnPreferenceChangeListener(this);
			mUsePull.setOnPreferenceChangeListener(this);
			mOverrideDNS.setOnPreferenceChangeListener(this);
			mSearchdomain.setOnPreferenceChangeListener(this);
			mCustomRoutes.setOnPreferenceChangeListener(this);
			
			

			
			loadSettings();
		}

		private void loadSettings() {
		
			mUsePull.setChecked(mProfile.mUsePull);
			mIPv4.setText(mProfile.mIPv4Address);
			mIPv6.setText(mProfile.mIPv6Address);
			mDNS1.setText(mProfile.mDNS1);
			mDNS2.setText(mProfile.mDNS2);
			mOverrideDNS.setChecked(mProfile.mOverrideDNS);
			mSearchdomain.setText(mProfile.mSearchDomain);
			mUseDefaultRoute.setChecked(mProfile.mUseDefaultRoute);
			mCustomRoutes.setText(mProfile.mCustomRoutes);
			mRouteNoPull.setChecked(mProfile.mRoutenopull);
			
			// Sets Summary
			onPreferenceChange(mIPv4, mIPv4.getText());
			onPreferenceChange(mIPv6, mIPv6.getText());
			onPreferenceChange(mDNS1, mDNS1.getText());
			onPreferenceChange(mDNS2, mDNS2.getText());
			onPreferenceChange(mSearchdomain, mSearchdomain.getText());
			onPreferenceChange(mCustomRoutes, mCustomRoutes.getText());
						
			setDNSState();
		}
		
		public void onSaveInstanceState (Bundle outState) {
			saveSettings();
		}
		
		@Override
		public void onStop() {
			saveSettings();
			super.onStop();
			
		}
		
		private void saveSettings() {
			mProfile.mUsePull = mUsePull.isChecked();
			mProfile.mIPv4Address = mIPv4.getText();
			mProfile.mIPv6Address = mIPv6.getText();
			mProfile.mDNS1 = mDNS1.getText();
			mProfile.mDNS2 = mDNS2.getText();
			mProfile.mOverrideDNS = mOverrideDNS.isChecked();
			mProfile.mSearchDomain = mSearchdomain.getText();
			mProfile.mUseDefaultRoute = mUseDefaultRoute.isChecked();
			mProfile.mCustomRoutes = mCustomRoutes.getText();
			mProfile.mRoutenopull = mRouteNoPull.isChecked();
			
		}
		
		@Override
		public boolean onPreferenceChange(Preference preference,
				Object newValue) {
			if(preference==mIPv4 || preference == mIPv6 
					 || preference==mDNS1 || preference == mDNS2
					 || preference == mSearchdomain || preference == mCustomRoutes
					)
			
				preference.setSummary((String)newValue);

			if(preference== mUsePull || preference == mOverrideDNS)
				if(preference==mOverrideDNS) { 
					// Set so the function gets the right value
					mOverrideDNS.setChecked((Boolean) newValue);
				}
				setDNSState();
			
			saveSettings();
			return true;
		}

		private void setDNSState() {
			boolean enabled;
			mOverrideDNS.setEnabled(mUsePull.isChecked());
			mRouteNoPull.setEnabled(mUsePull.isChecked());
			if(!mUsePull.isChecked())
				enabled =true;
			else if (mOverrideDNS.isChecked())
				enabled = true;
			else
				enabled = false;

			mDNS1.setEnabled(enabled);
			mDNS2.setEnabled(enabled);
			mSearchdomain.setEnabled(enabled);
			

		}


	}