package com.quaap.launchtime;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.view.KeyEvent;
import android.widget.Toast;

import com.quaap.launchtime.color.ColorDemo;
import com.quaap.launchtime.components.IconsHandler;

import java.util.Map;

/**
 * Copyright (C) 2017   Tom Kliethermes
 *
 * This file is part of LaunchTime and is is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 3 of the License, or (at your option) any
 * later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 *  Some portions derived from KISS.
 *  https://github.com/Neamar/KISS
 *
 */


public class ColorSettingsActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setBackgroundDrawable(new ColorDrawable(Color.DKGRAY));
        getListView().setBackgroundColor(Color.DKGRAY);
        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();

    }

    @Override
    protected boolean isValidFragment(String fragmentName) {
        if (fragmentName.startsWith("com.quaap.launchtime.ColorSettingsActivity$")) {
            return true;
        }
        return super.isValidFragment(fragmentName);
    }

    public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
        ColorDemo colorDemo;
        SharedPreferences prefs;
        Handler handler;
        String iconspackkey = "";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.color_preferences);
            iconspackkey = getString(R.string.pref_key_icons_pack);

            handler = new Handler();

            colorDemo = (ColorDemo)findPreference("colordemo");

            colorDemo.applyStyle();

            final Activity activity = getActivity();

            Preference colorbutton = findPreference(getString(R.string.pref_key_reset_colors));
            colorbutton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {

                    new AlertDialog.Builder(activity)

                            .setTitle(R.string.reset_colors_title)
                            .setMessage(R.string.confirm_reset_colors)

                            .setPositiveButton(R.string.reset_colors_title, new DialogInterface.OnClickListener() {

                                public void onClick(DialogInterface dialog, int whichButton) {
                                    IconsHandler ich = GlobState.getIconsHandler(activity);
                                    ich.getTheme().resetUserColors();
                                    if (!activity.isDestroyed() && !activity.isFinishing()) {
                                        Toast.makeText(activity, R.string.colors_reset_default, Toast.LENGTH_SHORT).show();
                                        reload();
                                    }
                                    //getActivity().finish();


                                    dialog.dismiss();
                                }

                            })
                            .setNegativeButton(R.string.cancel,  new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {
                                    dialog.dismiss();
                                }
                            })
                            .create().show();


                    return true;
                }
            });


            prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

        }

        private void reload() {
            Intent intent = getActivity().getIntent();
            getActivity().overridePendingTransition(0, 0);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            getActivity().finish();
            getActivity().overridePendingTransition(0, 0);
            getActivity().startActivity(intent);
        }

        @Override
        public void onPause() {
            prefs.unregisterOnSharedPreferenceChangeListener(this);
            super.onPause();
        }


        @Override
        public void onResume() {
            super.onResume();

            IconsHandler iph = GlobState.getIconsHandler(this.getActivity());
            findPreference(getString(R.string.pref_key_icon_tint)).setEnabled(iph.isIconTintable());

            ListPreference iconsPack = (ListPreference)findPreference(getString(R.string.pref_key_icons_pack));

            setListPreferenceIconsPacksData(iconsPack, this.getActivity());
//            iconsPack.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
//                @Override
//                public boolean onPreferenceChange(Preference preference, Object newValue) {
//                    getActivity().finish();
//                    return true;
//                }
//            });

            prefs.registerOnSharedPreferenceChangeListener(this);

        }

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, final String pref) {

            if (handler!=null && pref!=null && colorDemo!=null) {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (pref.equals(iconspackkey)) {
                            reload();
                        } else {
                            colorDemo.applyStyle();
                        }
                    }
                }, 500);
            }
        }

    }


    @Override
    public void onBackPressed() {
        super.onBackPressed();
        //Intent main = new Intent(this, MainActivity.class);
        ////setResult(RESULT_OK);
        finish();
        //startActivity(main);

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_HOME || keyCode==KeyEvent.KEYCODE_MENU) {
            Intent main = new Intent(this, MainActivity.class);
            startActivity(main);
            setResult(RESULT_OK);
            finish();
        }
        return super.onKeyDown(keyCode, event);
    }
//    @Override
//    public void onResume() {
//        super.onResume();
//    }
//
//    @Override
//    protected void onPause() {
//        super.onPause();
//        finish();
//    }

    private static void setListPreferenceIconsPacksData(ListPreference lp, Context context) {
        IconsHandler iph = GlobState.getIconsHandler(context);

        iph.loadAvailableIconsPacks();

        Map<String, String> iconsPacks = iph.getAllIconsThemes();

        CharSequence[] entries = new CharSequence[iconsPacks.size()];
        CharSequence[] entryValues = new CharSequence[iconsPacks.size()];

        int i = 0;
        for (String packageIconsPack : iconsPacks.keySet()) {
            entries[i] = iconsPacks.get(packageIconsPack);
            entryValues[i] = packageIconsPack;
            i++;
        }

        lp.setEntries(entries);
        lp.setDefaultValue(IconsHandler.DEFAULT_PACK);
        lp.setEntryValues(entryValues);
    }
}