package com.example.unodtantos.appqueology2.controlador;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.unodtantos.appqueology2.R;
import com.example.unodtantos.appqueology2.modelo.Proyecto;

import java.util.ArrayList;

/**
 * Created by unodtantos on 11/05/2015.
 */
public class AdapterProyectos extends ArrayAdapter<Proyecto> {

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

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

    private Activity context;
    private ArrayList<Proyecto> proyectos;
    private Typeface font;
    private Controlador controlador;

    // </editor-fold>

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

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

    /**
     * Constructor de la clase.
     * @param context
     * @param proyectos
     */
    public AdapterProyectos(Activity context, ArrayList<Proyecto> proyectos) {
        super(context, R.layout.activity_adapter_proyecto, proyectos);

        this.context = context;
        this.controlador = (Controlador) context.getApplicationContext();
        this.proyectos = proyectos;
        this.font = Typeface.createFromAsset(context.getAssets(), "gloriahallelujah.ttf");
    }

    // </editor-fold>

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

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

    /**
     * Método que infla el contexto padre con cada uno de las actívities que representan a cada uno
     * de los proyectos almacenados.
     * @param posicion
     * @param view
     * @param parent
     * @return
     */
    public View getView(final int posicion, View view, ViewGroup parent){

        LayoutInflater inflater = context.getLayoutInflater();
        View item = inflater.inflate(R.layout.activity_adapter_proyecto, null);

        aspectoView(item, posicion);
        capturarEventos(item, posicion);

        return item;
    }

    // </editor-fold>

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

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

    /**
     * Capturando eventos onClick onLongClick de cada uno de los items que inflaran el ListView del
     * contexto padre.
     * @param item
     * @param posicion
     */
    private void capturarEventos(View item, final int posicion){

        LinearLayout lnly_selec = (LinearLayout) item.findViewById(R.id.lnly_linea_proyecto);

        lnly_selec.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String nombre_pr = proyectos.get(posicion).getNombre().toString();
                Intent intent = new Intent(context, AreaTrabajoActual.class);
                intent.putExtra("nombre_proyecto", nombre_pr);
                context.startActivity(intent);
                context.finish();
            }
        });

        lnly_selec.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                alertEliminarProyecto(posicion);
                return false;
            }
        });
    }

    // </editor-fold>

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

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

    /**
     * Alert que pide la confirmación por parte del usuario de que realmente desea eliminar
     * el proyecto en cuestión seleccionado con un LongClick.
     * @param posicion
     */
    private void alertEliminarProyecto(final int posicion){

        LayoutInflater li = LayoutInflater.from(context);
        View promptsView = li.inflate(R.layout.activity_dialogo_confirmar_eliminar_proyecto, 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 whichButton) {
                        String id = proyectos.get(posicion).getId().toString();
                        String nom_pr = proyectos.get(posicion).getNombre().toString();
                        long result = controlador.eliminarProyecto(id);
                        if (result == -1) {
                            Toast.makeText(context.getApplicationContext(), "Lo siento, se ha producido un error a la hora de eliminar el proyecto.", Toast.LENGTH_LONG).show();
                        } else {
                            controlador.borrarDataBase(nom_pr);
                            context.finish();
                            context.startActivity(context.getIntent());
                        }
                    }
                })
                .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();

        alertDialog.show();

        aspectoAlertEliminarProyecto(alertDialog, promptsView);
    }

    // </editor-fold>

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

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

    /**
     * Método que permite configurar el aspecto de cada uno de los items que representan a cada
     * uno de los los proyectos almacenados.
     * @param item
     * @param posicion
     */
    private void aspectoView(View item, int posicion){

        TextView nom_proyecto = (TextView) item.findViewById(R.id.txtv_nom_proy);
        nom_proyecto.setText("" + proyectos.get(posicion).getNombre());
        nom_proyecto.setTypeface(this.font);
        nom_proyecto.setTextColor(Color.WHITE);

        TextView autor_proyecto = (TextView) item.findViewById(R.id.txtv_autor_proy);
        autor_proyecto.setText("" + proyectos.get(posicion).getAutor());
        autor_proyecto.setTypeface(this.font);
        autor_proyecto.setTextColor(Color.WHITE);

        TextView nom_pro = (TextView) item.findViewById(R.id.txtv_nom_pro);
        TextView autor_pro = (TextView) item.findViewById(R.id.txtv_autor_pro);
        nom_pro.setTypeface(this.font);
        autor_pro.setTypeface(this.font);
    }

    /**
     * Método que configura el Alert que pide la confirmación al usuario de eliminar un proyecto.
     * @param alertDialog
     * @param promptsView
     */
    private void aspectoAlertEliminarProyecto(AlertDialog alertDialog, View promptsView){

        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

        Button btn_cancelar = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
        Button btn_aceptar = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
        TextView titulo = (TextView) promptsView.findViewById(R.id.fuente11);
        TextView mensaje = (TextView) promptsView.findViewById(R.id.fuente12);
        titulo.setTypeface(this.font);
        mensaje.setTypeface(this.font);

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

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

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

    // </editor-fold>

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