package com.ramos.munoz.tesis;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MenuPrincipalActivity extends Activity implements OnClickListener {
    SharedPreferences preferencias;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.menu_pop_up_activity);
	inicializarComponentes();
    }

    public void inicializarComponentes() {
	preferencias = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
	Button salir = (Button) findViewById(R.id.btnSalir);
	Button preferencias = (Button) findViewById(R.id.btnPreferencias);
	Button perfil = (Button) findViewById(R.id.btnPerfil);
	Button verHistorial = (Button) findViewById(R.id.btnVerHistorial);
	Button buscar = (Button) findViewById(R.id.btnBuscarEstacionamiento);
	Button vehiculos = (Button) findViewById(R.id.btnVehiculos);

	vehiculos.setOnClickListener(this);
	buscar.setOnClickListener(this);
	verHistorial.setOnClickListener(this);
	perfil.setOnClickListener(this);
	preferencias.setOnClickListener(this);
	salir.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
	// Inflate the menu; this adds items to the action bar if it is present.
	return true;
    }

    public void salir() {
	AlertDialog.Builder salir = new AlertDialog.Builder(this);
	CharSequence titulo = "";
	if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
	    titulo = Html.fromHtml("<font color='#000'><b>Cerrar sesión</b></font>");
	} else titulo ="Cerrar sesión";
	salir.setTitle(titulo);

	salir.setMessage("¿Desea cerrar sesión?");
	salir.setPositiveButton("Salir", new DialogInterface.OnClickListener() {
	    public void onClick(DialogInterface dialog, int which) {
		try {
		    removerAcc();
		    Usuario.borrarDatos();

		    Intent salir = new Intent(MenuPrincipalActivity.this, MapaActivity.class);
		    setResult(MapaActivity.CERRAR_SESION, salir);
		    finish();
		} catch (Exception e) {
		    e.printStackTrace();
		}
	    }

	    private void removerAcc() {
		AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
		Account[] list = manager.getAccounts();
		String usuario = null;
		for (Account account : list) {
		    if (account.type.equalsIgnoreCase(Constantes.ACCOUNT_TYPE)) {
			SharedPreferences.Editor editorPreferencias = preferencias.edit();

			editorPreferencias.remove("usuario");
			editorPreferencias.commit();
			manager.removeAccount(account, null, null);
		    }
		}
	    }
	});
	salir.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
	    public void onClick(DialogInterface dialog, int which) {
		dialog.cancel();
	    }
	});
	salir.show();
    }

    private void iniciarActivity(Class<?> activityClase) {
	try {
	    Intent activity = new Intent(this, activityClase);
	    startActivity(activity);
	} catch (Exception e) {
	    Log.e("IniciarActivity", "Error: " + e.getMessage());
	    e.printStackTrace();
	}
    }

    public void onClick(View v) {
	switch (v.getId()) {
	    case R.id.btnSalir:
		salir();
		break;
	    case R.id.btnPerfil:
		iniciarActivity(PerfilActivity.class);
		break;
	    case R.id.btnBuscarEstacionamiento:
		iniciarActivity(BuscarEstacionamientoActivity.class);
		this.finish();
		break;
	    case R.id.btnPreferencias:
		iniciarActivity(PreferenciasActivity.class);
		break;
	    case R.id.btnVerHistorial:
		iniciarActivity(HistorialActivity.class);
		break;
	    case R.id.btnVehiculos:
		iniciarActivity(VehiculoActivity.class);
		break;
	}
    }

    // Método para cerrar la ventana cuando se presiona fuera del dialogo
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
	Rect dimensiones = new Rect();
	getWindow().getDecorView().getHitRect(dimensiones);
	if (!dimensiones.contains((int) ev.getX(), (int) ev.getY())) {
	    this.finish();
	}
	return super.dispatchTouchEvent(ev);
    }

}
