package com.camilstaps.taize;


import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;

import com.camilstaps.common.NullListener;

public class SettingsActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();

        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                if (key.equals(SettingsFragment.PREF_LANGUAGE_READINGS)) {    // If we select a new language, set the fetch time to 0 to refetch on next request
                    Taize.forceNewDailyReading(getApplicationContext(), new NullListener<String>());
                } else if (key.equals(SettingsFragment.PREF_VERSION_BIBLE)) { // If we select a new bible, set the fetch time to 0 to refetch on next request
                    Taize.forceNewDailyReadingBibleText(getApplicationContext(), new NullListener<String>());
                }
            }
        });
    }

    private static Preference.OnPreferenceChangeListener onPreferenceChangeListener = new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference pref, Object newValue) {
            String stringValue = newValue.toString();

            if (pref instanceof ListPreference) {
                ListPreference listPref = (ListPreference) pref;
                int index = listPref.findIndexOfValue(stringValue);
                pref.setSummary(index >= 0 ? listPref.getEntries()[index] : null); // .getEntry() seems to cause problems
            } else {
                pref.setSummary(stringValue);
            }

            // If the preference actually changed ...
            /*if (!PreferenceManager.getDefaultSharedPreferences(pref.getContext()).getString(pref.getKey(), "").equals(stringValue)) {
                if (pref.getKey().equals(SettingsFragment.PREF_LANGUAGE_READINGS)) {    // If we select a new language, set the fetch time to 0 to refetch on next request
                    Taize.forceNewDailyReading(pref.getContext(), new NullListener<String>());
                } else if (pref.getKey().equals(SettingsFragment.PREF_VERSION_BIBLE)) { // If we select a new bible, set the fetch time to 0 to refetch on next request
                    Taize.forceNewDailyReadingBibleText(pref.getContext(), new NullListener<String>());
                }
            }*/

            return true;
        }
    };

    private static void bindSummaryToValue(Preference pref) {
        pref.setOnPreferenceChangeListener(onPreferenceChangeListener);
        onPreferenceChangeListener.onPreferenceChange(pref, PreferenceManager.getDefaultSharedPreferences(pref.getContext()).getString(pref.getKey(), pref.getSummary().toString()));
    }

    public static class SettingsFragment extends PreferenceFragment {
        public static final String PREF_LANGUAGE_READINGS = "pref_language_reading";
        public static final String PREF_VERSION_BIBLE = "pref_version_bible";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);

            bindSummaryToValue(findPreference(PREF_LANGUAGE_READINGS));
            bindSummaryToValue(findPreference(PREF_VERSION_BIBLE));
        }
    }

}