package com.example.unodtantos.appqueology2.controlador;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
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.TextView;
import android.widget.Toast;

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

/**
 * Created by unodtantos on 05/04/2015.
 */
public class MenuPrincipal extends ActionBarActivity {

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

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

    private Controlador controlador;
    private Context context;
    private Typeface font;

    // </editor-fold>

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

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

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

        return super.onCreateOptionsMenu(menu);
    }

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

        inicializacion();
    }

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

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

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

        // Aspecto botones y textos:
        TextView txt_v_crear_proyecto = (TextView) findViewById(R.id.txtv_nuevo_pr);
        TextView txt_v_cargar_proyecto = (TextView) findViewById(R.id.fuente2);
        TextView txt_v_elige = (TextView) findViewById(R.id.fuente3);

        txt_v_crear_proyecto.setTypeface(this.font);
        txt_v_cargar_proyecto.setTypeface(this.font);
        txt_v_elige.setTypeface(this.font);
    }

    // </editor-fold>

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

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

    /**
     * Capturando el evento onClick.
     * @param view
     */
    public void onClickNuevoProyecto(View view){
        alertNuevoProyecto();
    }

    /**
     * Capturando el evento onClick.
     * @param view
     */
    public void onClickCargarProyecto(View view){
        Intent intent = new Intent(getApplicationContext(), CargarProyecto.class);
        startActivity(intent);
    }

    /**
     * Capturando el evento correspondiente al menu del ActionBar.
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_info:
                alertAboutUs();
                break;
            default:
                break;
        }
        return true;
    }

    /**
     * Capturando evento onClick.
     * @param alertDialog
     * @param promptsView
     */
    public void capturarEventoBtnAceptarAboutUs(final AlertDialog alertDialog, final View promptsView){

        Button btn = (Button) promptsView.findViewById(R.id.btn_aceptar_info_about);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
            }
        });
    }

    // </editor-fold>

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

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

    /**
     * Alert que muestra información de los desarrolladores.
     */
    private void alertAboutUs(){

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

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

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

        capturarEventoBtnAceptarAboutUs(alertDialog, promptsView);

        aspectoAlertAboutUs(alertDialog, promptsView);
    }

    /**
     * Alert para crear un nuevo proyecto.
     */
    private void alertNuevoProyecto(){

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

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

        final EditText etxt_nombre_pr = (EditText) promptsView.findViewById(R.id.etxt_nom_p);
        final EditText etxt_autor_pr = (EditText) promptsView.findViewById(R.id.etxt_autor_p);

        alertDialogBuilder
                .setCancelable(false)
                .setPositiveButton(" Aceptar ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        if (!etxt_nombre_pr.getText().toString().isEmpty()) {
                            String nom_pr = etxt_nombre_pr.getText().toString();
                            String autor_pr = etxt_autor_pr.getText().toString();
                            Boolean encontrado = controlador.comprobarExisteProyecto(nom_pr);
                            if (!encontrado) {
                                long result = controlador.insertarNuevoProyecto(nom_pr, autor_pr);
                                if (result == -1) {
                                    Toast.makeText(getApplicationContext(), "Lo siento, se ha producido un error al crear el proyecto.", Toast.LENGTH_LONG).show();
                                } else {
                                    Intent intent = new Intent(getApplicationContext(), AreaTrabajoActual.class);
                                    intent.putExtra("nombre_proyecto", nom_pr);
                                    startActivity(intent);

                                }
                            } else {
                                Toast.makeText(getApplicationContext(), "Lo siento, ese nombre ya existe, inténtalo con otro.", Toast.LENGTH_LONG).show();
                            }
                        } else {
                            Toast.makeText(getApplicationContext(), "No se ha creado ningún proyecto ya que no has introducido un nombre para el.", Toast.LENGTH_LONG).show();
                        }
                    }
                })
                .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });

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

        aspectoAlertNuevoProyecto(alertDialog, promptsView);
    }

    /**
     * Método que permite configurar el aspecto del alertCrearNuevoProyecto.
     * @param alertDialog
     * @param promptsView
     */
    private void aspectoAlertNuevoProyecto(AlertDialog alertDialog, View promptsView){

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

        TextView titulo = (TextView) promptsView.findViewById(R.id.fuente8);
        TextView nom_p = (TextView) promptsView.findViewById(R.id.fuente9);
        TextView autor_p = (TextView) promptsView.findViewById(R.id.fuente10);
        titulo.setTypeface(this.font);
        nom_p.setTypeface(this.font);
        autor_p.setTypeface(this.font);

        Button btn_cancelar = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
        Button btn_aceptar = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);

        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(this.font);
            btn_cancelar.setBackgroundDrawable(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);
        }
    }

    /**
     * Método para configurar el aspecto del alert con información sobre los desarrolladores.
     * @param alertDialog
     * @param promptsView
     */
    private void aspectoAlertAboutUs(AlertDialog alertDialog, View promptsView){

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

        TextView app_t = (TextView) promptsView.findViewById(R.id.textView14);
        TextView alumno_t = (TextView) promptsView.findViewById(R.id.textView20);
        TextView fecha_t = (TextView) promptsView.findViewById(R.id.textView22);
        TextView autor_t = (TextView) promptsView.findViewById(R.id.textView8);
        TextView mail_t = (TextView) promptsView.findViewById(R.id.textView16);
        TextView telefono_t = (TextView) promptsView.findViewById(R.id.textView18);
        TextView app = (TextView) promptsView.findViewById(R.id.textView15);
        TextView alumno = (TextView) promptsView.findViewById(R.id.textView21);
        TextView fecha = (TextView) promptsView.findViewById(R.id.textView23);
        TextView autor = (TextView) promptsView.findViewById(R.id.textView10);
        TextView mail = (TextView) promptsView.findViewById(R.id.textView17);
        TextView telefono = (TextView) promptsView.findViewById(R.id.textView19);
        app_t.setTypeface(this.font);
        alumno_t.setTypeface(this.font);
        fecha_t.setTypeface(this.font);
        autor_t.setTypeface(this.font);
        mail_t.setTypeface(this.font);
        telefono_t.setTypeface(this.font);
        app.setTypeface(this.font);
        alumno.setTypeface(this.font);
        fecha.setTypeface(this.font);
        autor.setTypeface(this.font);
        mail.setTypeface(this.font);
        telefono.setTypeface(this.font);
        app_t.setTextColor(Color.WHITE);
        alumno_t.setTextColor(Color.WHITE);
        fecha_t.setTextColor(Color.WHITE);
        autor_t.setTextColor(Color.WHITE);
        mail_t.setTextColor(Color.WHITE);
        telefono_t.setTextColor(Color.WHITE);
        app.setTextColor(Color.WHITE);
        alumno.setTextColor(Color.WHITE);
        fecha.setTextColor(Color.WHITE);
        autor.setTextColor(Color.WHITE);
        mail.setTextColor(Color.WHITE);
        telefono.setTextColor(Color.WHITE);

        Button btn = (Button) promptsView.findViewById(R.id.btn_aceptar_info_about);
        btn.setBackgroundDrawable(getResources().getDrawable(R.drawable.dialog_button_selector));
        btn.setTextColor(Color.WHITE);
        btn.setTypeface(this.font);
    }

    // </editor-fold>

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