package com.example.unodtantos.appqueology2.controlador;

import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.example.unodtantos.appqueology2.R;
import com.oguzdev.circularfloatingactionmenu.library.FloatingActionButton;
import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu;
import com.oguzdev.circularfloatingactionmenu.library.SubActionButton;

/**
 * Created by unodtantos on 11/05/2015.
 */
public class FragmentMenuAnimado extends Fragment {

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

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

    protected final int REQUEST_CODE_2 = 100;
    protected final int REQUEST_CODE_3 = 1000;
    protected final int REQUEST_CODE_4 = 10000;

    private Context context;
    private String nombre_proyecto;
    private View rootView;
    private ImageView fabContent;
    private FloatingActionButton darkButton;
    static FloatingActionMenu centerBottomMenu;
    private String ue_actual;

    private ImageView rlIcon1;
    private ImageView rlIcon2;
    private ImageView rlIcon3;
    private ImageView rlIcon4;
    private ImageView rlIcon5;
    private ImageView rlIcon6;

    // </editor-fold>

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

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

    /**
     * Constructor del Fragment vacío.
     * @return
     */
    public final FragmentMenuAnimado newInstance(){
        return new FragmentMenuAnimado();
    }

    // </editor-fold>

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

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

    /**
     * Constructor de la vista.
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.fragment_menu_animado, container, false);

        crearSubmenus();
        submenusApariencia();
        crearMenuCentral();
        capturarEventosSubmenus();

        return rootView;
    }

    // </editor-fold>

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

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

    /**
     * Método que se encarga de crear el botón central de menú animado.
     */
    private void crearMenuCentral(){

        fabContent = new ImageView(getActivity());
        fabContent.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_settings));
        fabContent.setVisibility(View.VISIBLE);

        darkButton = new FloatingActionButton.Builder(getActivity())
                .setTheme(FloatingActionButton.THEME_DARK)
                .setContentView(fabContent)
                .setPosition(FloatingActionButton.POSITION_BOTTOM_CENTER)
                .build();

        SubActionButton.Builder rLSubBuilder = new SubActionButton.Builder(getActivity())
                .setTheme(SubActionButton.THEME_DARK);

        centerBottomMenu = new FloatingActionMenu.Builder(getActivity())
                .setStartAngle(0)
                .setEndAngle(-180)
                .setAnimationHandler(new SlideInAnimationHandler())
                .addSubActionView(rLSubBuilder.setContentView(rlIcon3).build())
                .addSubActionView(rLSubBuilder.setContentView(rlIcon1).build())
                .addSubActionView(rLSubBuilder.setContentView(rlIcon2).build())
                .addSubActionView(rLSubBuilder.setContentView(rlIcon4).build())
                .addSubActionView(rLSubBuilder.setContentView(rlIcon6).build())
                .addSubActionView(rLSubBuilder.setContentView(rlIcon5).build())
                .attachTo(darkButton)
                .build();
        darkButton.setVisibility(View.VISIBLE);
    }

    // </editor-fold>

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

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

    /**
     * Método que se encarga de crear las diferentes imágenes que representarán a los diferentes
     * botones que flotan alrededor del botón central del menú.
     */
    private void crearSubmenus(){

        rlIcon1 = new ImageView(getActivity());
        rlIcon2 = new ImageView(getActivity());
        rlIcon3 = new ImageView(getActivity());
        rlIcon4 = new ImageView(getActivity());
        rlIcon5 = new ImageView(getActivity());
        rlIcon6 = new ImageView(getActivity());
    }

    /**
     * Método que se encarga de configurar el aspecto del los diferentes botones del submenú.
     */
    private void submenusApariencia(){

        rlIcon1.setImageDrawable(getResources().getDrawable(R.drawable.boton_libro));
        rlIcon2.setImageDrawable(getResources().getDrawable(R.drawable.grafo));
        rlIcon3.setImageDrawable(getResources().getDrawable(R.drawable.reloj));
        rlIcon4.setImageDrawable(getResources().getDrawable(R.drawable.boton_tabla));
        rlIcon5.setImageDrawable(getResources().getDrawable(R.drawable.infor));
        rlIcon6.setImageDrawable(getResources().getDrawable(R.drawable.limpiar));
    }

    /**
     * Método que permite capturar los eventos de los diferentes botones del submenú.
     */
    private void capturarEventosSubmenus(){

        rlIcon1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, DiarioExcavacion.class);
                intent = prepararIntent(intent);
                getActivity().startActivityForResult(intent, REQUEST_CODE_4);
            }
        });

        rlIcon2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, Grafo.class);
                intent = prepararIntent(intent);
                getActivity().startActivityForResult(intent, REQUEST_CODE_2);
            }
        });

        rlIcon3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((AreaTrabajoActual)getActivity()).alertUltimaUe();
            }
        });

        rlIcon4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, Tabla.class);
                intent = prepararIntent(intent);
                getActivity().startActivityForResult(intent, REQUEST_CODE_3);
            }
        });

        rlIcon5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((AreaTrabajoActual)getActivity()).alertInstrucciones();
                ((AreaTrabajoActual)getActivity()).habilitarVistaBotonesPadresHijos();
            }
        });
        rlIcon6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((AreaTrabajoActual)getActivity()).vaciarPantallaTrabajo();
                ((AreaTrabajoActual)getActivity()).deshabilitarVistaotonesPadresHijos();
            }
        });
    }

    /**
     * Método que permite cargar en el Intent los valores que se pretenden pasar a la otra
     * actividad.
     * @param intent
     * @return
     */
    private Intent prepararIntent(Intent intent){

        intent.putExtra("nombre_proyecto", nombre_proyecto);
        if (!ue_actual.isEmpty()) {
            intent.putExtra("flag", true);
            intent.putExtra("nom_ue", ue_actual);
        } else {
            intent.putExtra("flag", false);
        }

        return intent;
    }

    /**
     * Metodo que permite cerrar el subemnú
     * @param cerrar
     */
    public void cerrarSubmenus(Boolean cerrar){
        centerBottomMenu.close(cerrar);
    }

    /**
     * Método que permite abrir el submenú.
     * @param abrir
     */
    public void abrirSubmenus(Boolean abrir){
        centerBottomMenu.open(abrir);
    }

    // </editor-fold>

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

    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">

    public void setUe_actual(String ue_actual) {
        this.ue_actual = ue_actual;
    }

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    public String getNombre_proyecto() {
        return nombre_proyecto;
    }

    public void setNombre_proyecto(String nombre_proyecto) {
        this.nombre_proyecto = nombre_proyecto;
    }

    // </editor-fold>

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

}

