package com.example.unodtantos.appqueology2.controlador;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.Point;
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.Display;
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.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

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

import java.util.ArrayList;

/**
 * Created by unodtantos on 06/04/2015.
 */
public class Grafo extends ActionBarActivity {

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

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

    private GrafoView grafoV;
    private Controlador controlador;
    private String nombre_proyecto;
    private String nombre_ue;
    private Context context;

    // </editor-fold>

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

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

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

        controlador = (Controlador) getApplicationContext();

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

        context = this;

        nombre_proyecto = getIntent().getStringExtra("nombre_proyecto");
        Boolean flag = getIntent().getBooleanExtra("flag",false);
        String nom_ue = "";
        if(flag){
            this.nombre_ue = getIntent().getStringExtra("nom_ue");
        }else{
            String n = controlador.getUe_seleccionada_grafo();
            if(!n.isEmpty()){
                this.nombre_ue = n;
            }
        }

        calcularDimensionesPantalla();

        HorizontalScrollView horizontalScrollView2 = new HorizontalScrollView(getApplicationContext());
        ScrollView scrollView = new ScrollView(getApplicationContext());

        this.grafoV = new GrafoView(getApplicationContext(), nombre_proyecto, this.nombre_ue);

        scrollView.addView(grafoV);

        horizontalScrollView2.addView(scrollView);
        setContentView(horizontalScrollView2);

    }

    // </editor-fold>

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

    // <editor-fold defaultstate="collapsed" desc="Constructor del 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="Capturando eventos">

    @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.
     */
    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_grafo(nom_ue);
                                nombre_ue = nom_ue;
                                grafoV.setNombreUe(nom_ue);
                                grafoV.invalidar();
                                grafoV.setXxx(0);
                                grafoV.setYyy(0);

                                dialog.cancel();
                            } 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 se encarga de configurar el aspecto del Alert mencionado.
     * @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 se encargad de darle aspecto a los botones del Alert que nos ocupa.
     * @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>

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

    // <editor-fold defaultstate="collapsed" desc="Calcular dimensiones window">

    /**
     * Método que se encarga de calcular el tamaño de la Window.
     */
    private void calcularDimensionesPantalla(){

        ArrayList medidas = new ArrayList();

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width_win = size.x;
        int height_win = size.y;

        medidas.add(width_win);
        medidas.add(height_win);

        controlador.setMedidasPantalla(medidas);
    }

    // </editor-fold>

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