package org.microg.nlp.backend.nominatim;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;

import com.takisoft.fix.support.v7.preference.PreferenceFragmentCompat;

public class SettingsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle(R.string.app_name);
            getSupportActionBar().show();
        }

        // Display the fragment as the main content.
        getSupportFragmentManager()
                .beginTransaction()
                .replace(android.R.id.content, new PrefsFragment())
                .commit();
    }

    public static class PrefsFragment extends PreferenceFragmentCompat {
        public static final String catApiKeyToken = "cat_api_preference";
        public static final String apiChoiceToken = "api_server_choice";
        public static final String mapQuestApiKeyToken = "api_preference";

        private SharedPreferences shPref;
        private SharedPreferences.OnSharedPreferenceChangeListener listener;

        private Preference mApiChoicePref;
        private Preference mCatAPIKeyPref;
        private Preference mMapQuestApiKeyPref;

        @Override
        public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) {
            shPref = getPreferenceManager().getSharedPreferences();

            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.preferences);

            mApiChoicePref = findPreference(apiChoiceToken);
            mCatAPIKeyPref = findPreference(catApiKeyToken);
            mMapQuestApiKeyPref = findPreference(mapQuestApiKeyToken);

            refreshPrefs();

            // Need explicit reference.
            // See :
            // http://stackoverflow.com/a/3104265
            listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
                @Override
                public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                    updatePreference(findPreference(key), key);
                }
            };
            shPref.registerOnSharedPreferenceChangeListener(listener);

            mApiChoicePref.setSummary(shPref.getString(apiChoiceToken, "OSM"));
            mMapQuestApiKeyPref.setSummary(shPref.getString(mapQuestApiKeyToken, ""));
        }

        private void refreshPrefs() {
            String apiServer = shPref.getString(apiChoiceToken, "OSM");
            if (apiServer.equals("OSM")) {
                getPreferenceScreen().removePreference(mCatAPIKeyPref);
            } else {
                getPreferenceScreen().addPreference(mCatAPIKeyPref);
            }
        }

        private void updatePreference(Preference preference, String key) {
            refreshPrefs();

            if (preference == null) {
                return;
            }

            if (preference instanceof ListPreference) {
                ListPreference listPreference = (ListPreference) preference;
                listPreference.setSummary(listPreference.getEntry());
                return;
            }

            preference.setSummary(shPref.getString(key, "Default"));
        }
    }
}