package org.example.proyecto;

import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Victor on 05/09/2016.
 */
public class MisCiudades extends AppCompatActivity implements
        android.view.View.OnClickListener, android.view.View.OnLongClickListener {

    SharedPreferences pref;

    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    static AdaptadorCiudades adaptador;

    public static int id;

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.misciudades);

        //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbarMisCiudades);
        //setSupportActionBar(toolbar);

        Aplicacion app = (Aplicacion) getApplication();
        adaptador = app.getAdaptador();
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        recyclerView.setAdapter(adaptador);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setLongClickable(true);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.añadirCiudad);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CustomDialog cdd=new CustomDialog(MisCiudades.this);
                cdd.show();
            }
        });

        pref = PreferenceManager.getDefaultSharedPreferences(this);

        adaptador.notifyDataSetChanged();

        adaptador.setOnItemClickListener(new View.OnClickListener(){
            @Override public void onClick(View v) {

                Intent i = new Intent(MisCiudades.this, Clima.class);
                i.putExtra("posicion",recyclerView.getChildAdapterPosition(v));
                startActivity(i);

            }
        });

        adaptador.setOnItemLongClickListener(new View.OnLongClickListener() {
            public boolean onLongClick(final View v) {
                MisCiudades.id = recyclerView.getChildAdapterPosition(v);
                AlertDialog.Builder menu = new AlertDialog.Builder(MisCiudades.this);


                List<String> listItems = new ArrayList<String>();

                listItems.add("Borrar ciudad");

                if (adaptador.vectorCiudades.elementAt(MisCiudades.id).seleccionada) {
                    listItems.add("Quitar notificaciones");
                } else {
                    listItems.add("Añadir notificaciones");
                }

                final CharSequence[] opciones = listItems.toArray(new CharSequence[listItems.size()]);

                menu.setItems(opciones, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int opcion) {
                        switch (opcion) {
                            case 0: //Borrar


                                AlertDialog.Builder builder = new AlertDialog.Builder(MisCiudades.this);
                                builder.setMessage("¿Estás seguro?");

                                // Add the buttons
                                builder.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        // User clicked OK button
                                        adaptador.borrar(MisCiudades.id);
                                        adaptador.notifyDataSetChanged();
                                        adaptador.almacen.actualizarVectorCiudades(adaptador);
                                    }
                                });

                                builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        // User cancelled the dialog
                                        dialog.dismiss();

                                    }
                                });

                                // Create the AlertDialog
                                builder.create().show();

                                break;

                            case 1: //añadir/quitar a notificaciones

                                if (adaptador.vectorCiudades.elementAt(MisCiudades.id).seleccionada){ //quitar notificaciones

                                    adaptador.vectorCiudades.elementAt(MisCiudades.id).seleccionada = false;
                                    adaptador.notifyDataSetChanged();

                                    adaptador.almacen.actualizarVectorCiudades(adaptador);

                                    AlertDialog.Builder builderSel = new AlertDialog.Builder(MisCiudades.this);
                                    builderSel.setMessage("Notificaciones eliminadas");
                                    builderSel.setPositiveButton(android.R.string.ok, null);
                                    builderSel.create().show();


                                } else { //añadir notificaciones

                                    for (int i=0;i<adaptador.vectorCiudades.size();i++){
                                        adaptador.vectorCiudades.elementAt(i).seleccionada = false;
                                    }

                                    adaptador.vectorCiudades.elementAt(MisCiudades.id).seleccionada = true;
                                    adaptador.notifyDataSetChanged();
                                    adaptador.almacen.actualizarVectorCiudades(adaptador);
                                    adaptador.comprobarCondicion(MisCiudades.this);

                                    AlertDialog.Builder builderSel = new AlertDialog.Builder(MisCiudades.this);
                                    builderSel.setMessage("Ciudad seleccionada correctamente" +
                                            " para recibir notificaciones cuando " +
                                            "se cumplan las condiciones");
                                    builderSel.setPositiveButton(android.R.string.ok, null);
                                    builderSel.create().show();

                                }

                                break;
                        }
                    }
                });
                menu.create().show();
                return true;
            }
        });

    }

    @Override public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_misciudades, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.menu_actualizar:
                adaptador.recargarClima(MisCiudades.this,this,true);
                adaptador.notifyDataSetChanged();

                break;


            case R.id.menu_anadir_ciudad:
                CustomDialog cdd=new CustomDialog(MisCiudades.this);
                cdd.show();
                break;

            case R.id.menu_preferencias:
                lanzarPreferencias(null);
                break;

            case R.id.menu_borrar_ciudades:

                AlertDialog.Builder builder_borrar = new AlertDialog.Builder(MisCiudades.this);
                builder_borrar.setMessage("¿Estás seguro?");

                // Add the buttons
                builder_borrar.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        // User clicked OK button
                        adaptador.borrarVectorCiudades(MisCiudades.this,MisCiudades.this);
                    }
                });

                builder_borrar.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        // User cancelled the dialog
                        dialog.dismiss();

                    }
                });

                // Create the AlertDialog
                builder_borrar.create().show();

                break;


            case R.id.menu_acerca:
                Intent i = new Intent(this, AcercaDe.class);
                startActivity(i);
                break;
        }

        return false;

    }

    @Override
    public void onClick(View view) {

    }

    @Override
    public boolean onLongClick(View view) {
        return false;
    }


    public void lanzarPreferencias(View view){
        Intent i = new Intent(this, Preferencias.class);
        startActivity(i);
    }

    @Override
    public void onResume(){
        adaptador.notifyDataSetChanged();
        super.onResume();
    }

}


