package com.mynameismidori.currencypickerexample;

import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.mynameismidori.currencypicker.CurrencyPicker;
import com.mynameismidori.currencypicker.CurrencyPickerListener;
import com.mynameismidori.currencypicker.ExtendedCurrency;

import java.util.ArrayList;
import java.util.HashSet;

public class CurrencyFragment extends Fragment implements View.OnClickListener, CurrencyPickerListener, SharedPreferences.OnSharedPreferenceChangeListener {
    View view;
    private TextView mCurrencyNameTextView, mCurrencyIsoCodeTextView, mCurrencySymbolTextView;
    private ImageView mCurrencyFlagImageView;
    private Button mPickCurrencyButton;
    private Button mOpenFragmentButton;
    private Button mOpenPreferenceButton;
    private TextView mTextView;
    private CurrencyPicker mCurrencyPicker;
    private SharedPreferences preferences;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (view == null) {

            view = inflater.inflate(R.layout.fragment_currency, container, false);


            mCurrencyNameTextView = (TextView) view.findViewById(R.id.selected_currency_name_text_view);
            mCurrencyIsoCodeTextView = (TextView) view.findViewById(R.id.selected_currency_iso_text_view);
            mCurrencySymbolTextView = (TextView) view.findViewById(R.id.selected_currency_symbol_text_view);
            mPickCurrencyButton = (Button) view.findViewById(R.id.currency_picker_button);
            mOpenFragmentButton = (Button) view.findViewById(R.id.openFragment);
            mOpenPreferenceButton = (Button) view.findViewById(R.id.openPreferences);
            mCurrencyFlagImageView = (ImageView) view.findViewById(R.id.selected_currency_flag_image_view);
            mCurrencyPicker = CurrencyPicker.newInstance("Select Currency");

            mPickCurrencyButton.setOnClickListener(this);
            mOpenFragmentButton.setOnClickListener(this);
            mOpenPreferenceButton.setOnClickListener(this);

            mTextView = (TextView) view.findViewById(R.id.selectedCurrencyPreference);
            preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
            preferences.registerOnSharedPreferenceChangeListener(this);


            String selectedCurrency = preferences.getString("selectedCurrency", getString(R.string.default_currency));
            mTextView.setText(selectedCurrency);

            Toast.makeText(getActivity(), selectedCurrency, Toast.LENGTH_LONG).show();
            // You can limit the displayed countries
            ArrayList<ExtendedCurrency> nc = new ArrayList<>();
            for (ExtendedCurrency c : ExtendedCurrency.getAllCurrencies()) {
                //if (c.getSymbol().endsWith("0")) {
                nc.add(c);
                //}
            }
            // and decide, in which order they will be displayed
            //Collections.reverse(nc);
            mCurrencyPicker.setCurrenciesList(nc);
            mCurrencyPicker.setCurrenciesList(preferences.getStringSet("selectedCurrencies", new HashSet<String>()));

            mCurrencyPicker.setListener(this);
        }

        return view;
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if(key.equals("selectedCurrency")){
            mTextView.setText(sharedPreferences.getString(key, ""));
        }
        if (key.equals("selectedCurrencies")) {
            mCurrencyPicker.setCurrenciesList(preferences.getStringSet("selectedCurrencies", new HashSet<String>()));
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        preferences.registerOnSharedPreferenceChangeListener(this);
        mTextView.setText(preferences.getString("selectedCurrency", "CZK"));
    }

    @Override
    public void onPause() {
        super.onPause();
        preferences.registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSelectCurrency(String name, String code, String symbol,
                                 int flagDrawableResID) {
        mCurrencyNameTextView.setText(name);
        mCurrencyIsoCodeTextView.setText(code);
        mCurrencySymbolTextView.setText(symbol);
        mCurrencyFlagImageView.setImageResource(flagDrawableResID);
        mCurrencyPicker.dismiss();
    }

    @Override
    public void onClick(View v) {
        //do what you want to do when button is clicked
        switch (v.getId()) {
            case R.id.currency_picker_button:
                mCurrencyPicker.show(getFragmentManager(), "CURRENCY_PICKER");
                break;
            case R.id.openPreferences:
                Intent intent = new Intent(getActivity(), CurrencySettingsActivity.class);
                startActivity(intent);
                break;
            case R.id.openFragment:

                FragmentTransaction transaction = getFragmentManager().beginTransaction();

                transaction.replace(R.id.container, mCurrencyPicker, "currencyFragment");
                transaction.addToBackStack(null);

                transaction.commit();
                break;
        }
    }

    private void getUserCurrencyInfo(String code) {
        ExtendedCurrency currency = ExtendedCurrency.getCurrencyByISO(code);
        if (currency != null) {
            mCurrencyFlagImageView.setImageResource(currency.getFlag());
            mCurrencySymbolTextView.setText(currency.getSymbol());
            mCurrencyIsoCodeTextView.setText(currency.getCode());
            mCurrencyNameTextView.setText(currency.getName());
        }
    }
}