package com.powerpoint45.dtube;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.UiModeManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.MenuItem;

import java.util.List;

public class PreferencesActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {


    boolean tvMode;
    static SharedPreferences pref;

    //variables to help deal with resetting the theme when darkmode is changed
    //This is a difficult task due to all the fragments etc
    static Activity uiActivity;
    static boolean inUIActivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (Preferences.darkMode)
            setTheme(R.style.AppThemeDarkWAB);
        super.onCreate(savedInstanceState);

        Log.d("dtube","pref oncreate" +pref);


        if (pref == null) {
            pref = PreferenceManager.getDefaultSharedPreferences(this);
            pref.registerOnSharedPreferenceChangeListener(this);
        }

    }

    /**
     * Populate the activity with the top-level headers.
     */
    @Override
    public void onBuildHeaders(List<Header> target) {
        UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
        assert uiModeManager != null;
        if (uiModeManager.getCurrentModeType()== Configuration.UI_MODE_TYPE_TELEVISION)
            tvMode = true;

        if (tvMode){
            loadHeadersFromResource(R.xml.preference_header_tv, target);
        }else
            loadHeadersFromResource(R.xml.preference_header, target);
    }


    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Log.d("dtube","pref changed "+key);
        switch (key){
            case "dark_mode":
                if (pref!=null)
                    pref.unregisterOnSharedPreferenceChangeListener(this);
                Preferences.darkMode = sharedPreferences.getBoolean("dark_mode", false);
                MainActivity.changedDarkMode = true;
                if (uiActivity!=null)
                    uiActivity.finish();
                finish();
                startActivity(new Intent(PreferencesActivity.this, PreferencesActivity.class));
                break;
            default:
                break;
        }
    }

    @Override
    public void onHeaderClick(Header header, int position) {
        super.onHeaderClick(header, position);
        if (header.id == R.id.logout) {
            new AlertDialog.Builder(this, R.style.Theme_AppCompat_DayNight_Dialog_Alert)
                    .setMessage(R.string.logout_confirm)
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int whichButton) {
                            DtubeAPI.logout(PreferencesActivity.this);
                            Intent i = new Intent();
                            i.putExtra("logout",true);
                            setResult(RESULT_OK,i);
                            PreferencesActivity.this.finish();
                        }})
                    .setNegativeButton(android.R.string.no, null).show();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.d("dtube","onOptionsItemSelected "+item.getItemId());
        return super.onOptionsItemSelected(item);

    }

    /**
     * This fragment shows the preferences for the first header.
     */
    public static class Prefs1Fragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs1_fragment);
            inUIActivity = true;
            uiActivity = getActivity();
        }
    }

    /**
     * This fragment contains a second-level set of preference that you
     * can get to by tapping an item in the first preferences fragment.
     */
    public static class Prefs1FragmentInner extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs2_fragment);
        }

    }

    /**
     * This fragment shows the preferences for the second header.
     */
    public static class Prefs2Fragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // Can retrieve arguments from headers XML.
            Log.i("args", "Arguments: " + getArguments());

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

    private final String[] FRAGMENTS = {
            "com.powerpoint45.dtube.PreferencesActivity$Prefs1Fragment",
            "com.powerpoint45.dtube.PreferencesActivity$Prefs2Fragment",
            "com.powerpoint45.dtube.PreferencesActivity$Prefs1FragmentInner",
            "com.powerpoint45.dtube.PreferencesActivity$Prefs2FragmentInner",
    };


    @Override
    protected boolean isValidFragment(String fragmentName) {
        Log.d("dtube",fragmentName);

        for (String FRAGMENT : FRAGMENTS) {
            if (FRAGMENT.equals(fragmentName)) {
                return true;
            }
        }
        return super.isValidFragment(fragmentName);
    }


    @Override
    public void finish(){
        if (!inUIActivity) {
            if (pref != null)
                pref.unregisterOnSharedPreferenceChangeListener(this);
            pref = null;
        }else
            inUIActivity = false;
        super.finish();
    }

}