package com.example.unodtantos.appqueology2.controlador;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.text.Spannable;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.unodtantos.appqueology2.R;
import com.example.unodtantos.appqueology2.modelo.Nodo;
import com.example.unodtantos.appqueology2.modelo.TypefaceSpan;

import java.util.ArrayList;


/**
 * Created by unodtantos on 24/03/2015.
 */
public class DiarioExcavacion extends ActionBarActivity {

    /*-------------------------------------------------------------------------------------------------*/

    // <editor-fold defaultstate="collapsed" desc="Atributos de la clase">

    private Cursor cursor;
    private ListView lista;
    private Controlador controlador;
    private ArrayList<Nodo> nodos_ues;
    private String nombre_proyecto;
    private String nombre_ue_seleccionada;
    private AdapterDiarioExcavacion adapter;
    private Context context;

    // </editor-fold>

    /*--------------------------------------------------------------------------------------------*/

    // <editor-fold defaultstate="collapsed" desc="Constructor de la Activity">

    /**
     * Constructor de la clase.
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diario_excavacion);

        inicializacion();
    }

    // </editor-fold>

    /*--------------------------------------------------------------------------------------------*/

    // <editor-fold defaultstate="collapsed" desc="Constructor Menu actionBar">

    /**
     * Constructor del menú del ActionBar.
     * @param menu
     * @return
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main2, menu);

        return super.onCreateOptionsMenu(menu);
    }

    // </editor-fold>

    /*--------------------------------------------------------------------------------------------*/

    // <editor-fold defaultstate="collapsed" desc="Inicializacion">

    /**
     * Método que se encarga de inicializar las variables para el correcto funcionamiento de la clase.
     */
    private void inicializacion(){

        this.context = this;

        // Aspecto actionBar
        getSupportActionBar().setElevation(0);
        SpannableString s = new SpannableString("UEs almacenadas: ");
        s.setSpan(new TypefaceSpan(this, "gloriahallelujah.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        ActionBar actionBarr= getSupportActionBar();
        actionBarr.setTitle(s);

        this.controlador = (Controlador) getApplicationContext();
        this.nombre_proyecto = getIntent().getExtras().getString("nombre_proyecto");
        Boolean flag = getIntent().getBooleanExtra("flag",false);
        if(flag){
            this.nombre_ue_seleccionada = getIntent().getStringExtra("nom_ue");
        }else {
            if (controlador.getUe_seleccionada_diario().isEmpty()) {
                this.nombre_ue_seleccionada = "";
            }
        }

        if (!controlador.getUe_seleccionada_diario().isEmpty()){
            this.nombre_ue_seleccionada = controlador.getUe_seleccionada_diario();
        }

        this.nodos_ues = new ArrayList<>();
        this.cursor = this.controlador.selectCursorUes(this.nombre_proyecto);
        while(cursor.moveToNext()){
            Nodo n = new Nodo();
            n.setId(Integer.parseInt(cursor.getString(0)));
            n.setNombre(cursor.getString(1));
            n.setTipoUe(cursor.getString(2));
            n.setDescripcion(cursor.getString(3));
            n.setFechaCreacionUe(cursor.getString(4));
            n.setDatacion1(cursor.getString(5));
            n.setDatacion2(cursor.getString(6));
            n.setNombreFoto(cursor.getString(7));
            n.setFechaFoto(cursor.getString(9));
            n.setUrlFoto(cursor.getString(8));
            n.setLocalizacion(cursor.getString(10));
            nodos_ues.add(n);
        }
        this.adapter = new AdapterDiarioExcavacion(this, this.nodos_ues, this.nombre_proyecto, this.nombre_ue_seleccionada);
        this.lista = (ListView) findViewById(R.id.lv_ues);
        this.lista.setAdapter(adapter);
    }

    // </editor-fold>

    /*--------------------------------------------------------------------------------------------*/

    // <editor-fold defaultstate="collapsed" desc="Capturando eventos actionBar">

    /**
     * Método que permite capturar los eventos del ActionBar.
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_info2:
                alertBuscarUe();
                break;
            default:
                break;
        }
        return true;
    }

    // </editor-fold>

    /*--------------------------------------------------------------------------------------------*/

    // <editor-fold defaultstate="collapsed" desc="Alert">

    /**
     * Método que configura el Alert que permite buscar y resaltar una UE dentro de la vista Diario
     * de Excavación.
     */
    private void alertBuscarUe(){

        LayoutInflater li = LayoutInflater.from(context);
        final View promptsView = li.inflate(R.layout.activity_dialogo_buscar_ue, null);

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
        alertDialogBuilder.setView(promptsView);

        alertDialogBuilder
                .setCancelable(false)
                .setPositiveButton(" Aceptar ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        EditText etxt_nombre = (EditText) promptsView.findViewById(R.id.etxt_nombre_ue_buscar);
                        String nom_ue = etxt_nombre.getText().toString();

                        if (nom_ue.isEmpty()) {
                            Toast.makeText(getApplicationContext(), "No se te puede mostrar la UE que buscas ya que no has introducido su nombre.", Toast.LENGTH_LONG).show();
                        } else {
                            Boolean encontrado = controlador.comprobarExiteUe(nombre_proyecto, nom_ue);
                            if (encontrado) {
                                controlador.setUe_seleccionada_diario(nom_ue);
                                dialog.cancel();
                                finish();
                                startActivity(getIntent());
                            } else {
                                Toast.makeText(getApplicationContext(), "Lo siento, esa UE no existe!, trata de intentarlo con otra", Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                })
                .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });


        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();

        aspectoAlertIrUe(alertDialog, promptsView);
    }

    // </editor-fold>

    /*--------------------------------------------------------------------------------------------*/

    // <editor-fold defaultstate="collapsed" desc="Aspecto alert">

    /**
     * Método que definirá el aspecto del Alert que busca y destaca una UE dentro de la vista Diario
     * de Excavación.
     * @param alertDialog
     * @param promptsView
     */
    private void aspectoAlertIrUe(AlertDialog alertDialog, View promptsView){

        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        Typeface font = Typeface.createFromAsset(getAssets(), "gloriahallelujah.ttf");

        TextView titulo = (TextView) promptsView.findViewById(R.id.fuente19);
        TextView nom_ue = (TextView) promptsView.findViewById(R.id.fuente20);
        titulo.setTypeface(font);
        nom_ue.setTypeface(font);

        aspectoBotonesPosNeg(alertDialog);
    }

    /**
     * Método que define el aspecto de los botones del Alert mencionado anteriormente.
     * @param alertDialog
     */
    private void aspectoBotonesPosNeg(AlertDialog alertDialog){

        Button btn_cancelar = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
        Button btn_aceptar = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
        Typeface font = Typeface.createFromAsset(getAssets(), "gloriahallelujah.ttf");

        if(btn_cancelar != null && btn_aceptar != null){

            btn_aceptar.setBackgroundDrawable(getResources().getDrawable(R.drawable.dialog_button_selector));
            btn_aceptar.setTextColor(Color.WHITE);
            btn_aceptar.setTypeface(font);
            btn_cancelar.setBackgroundDrawable(getResources().getDrawable(R.drawable.dialog_button_selector));
            btn_cancelar.setTextColor(Color.WHITE);
            btn_cancelar.setTypeface(font);

            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) btn_aceptar.getLayoutParams();
            params.setMargins(20, 0, 0, 0);
            btn_aceptar.setLayoutParams(params);
        }
    }

    // </editor-fold>

    /*--------------------------------------------------------------------------------------------*/
}
