package com.ramos.munoz.tesis;

import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;

import com.ramos.munoz.tesis.R;

public class MapaDetalleEstacionamiento extends FragmentActivity {
    private Estacionamiento estacionamiento;
    private int idEstacionamiento;
    private ViewPager viewPager;
    private AdaptadorViewPager adaptadorViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.mapa_detalle_estacionamiento);
	estacionamiento = new Estacionamiento();
	Bundle bolsa = getIntent().getExtras();
	idEstacionamiento = bolsa.getInt("id");
	buscarEstacionamiento();
    }

    private void buscarEstacionamiento() {

	BuscarAsincrono buscarThread = new BuscarAsincrono();
	buscarThread.execute(idEstacionamiento);
    }

    private void inicializarViewPager() {
	viewPager = (ViewPager) findViewById(R.id.viewPagerDetalle);
	adaptadorViewPager = new AdaptadorViewPager(getApplicationContext(), getSupportFragmentManager());
	viewPager.setAdapter(adaptadorViewPager);
	viewPager.setCurrentItem(0);
    }

    private void inicialiarTabs() {
	viewPager.setOnPageChangeListener(new OnPageChangeListener() {
	    public void onPageScrollStateChanged(int position) {

	    }

	    public void onPageScrolled(int arg0, float arg1, int arg2) {

	    }

	    public void onPageSelected(int position) {
		// TODO Auto-generated method stub
		switch (position) {
		    case 0:
			findViewById(R.id.mapaDetalleTab1).setVisibility(View.VISIBLE);
			findViewById(R.id.mapaDetalleTab2).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab3).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab4).setVisibility(View.INVISIBLE);
			break;

		    case 1:
			findViewById(R.id.mapaDetalleTab1).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab2).setVisibility(View.VISIBLE);
			findViewById(R.id.mapaDetalleTab3).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab4).setVisibility(View.INVISIBLE);
			break;
		    case 2:
			findViewById(R.id.mapaDetalleTab1).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab2).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab3).setVisibility(View.VISIBLE);
			findViewById(R.id.mapaDetalleTab4).setVisibility(View.INVISIBLE);
			break;
		    case 3:
			findViewById(R.id.mapaDetalleTab1).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab2).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab3).setVisibility(View.INVISIBLE);
			findViewById(R.id.mapaDetalleTab4).setVisibility(View.VISIBLE);
			break;
		}
	    }
	});
    }

    class AdaptadorViewPager extends FragmentPagerAdapter {
	private Context contexto;

	public AdaptadorViewPager(Context context, FragmentManager fm) {
	    super(fm);
	    contexto = context;
	}

	
	@Override
	public Fragment getItem(int position) {
	    Fragment f = new Fragment();
	    switch (position) {
		case 0:
		    f = MapaDetalleTab1.nuevaInstancia(contexto, estacionamiento);
		    break;
		case 1:
		    f = MapaDetalleTab2.nuevaInstancia(contexto, estacionamiento);
		    break;
		case 2:
		    f = MapaDetalleTab3.nuevaInstancia(contexto, estacionamiento);
		    break;
		case 3:
		    f = MapaDetalleTab4.nuevaInstancia(contexto, estacionamiento);
		    break;
	    }
	    return f;
	}

	@Override
	public int getCount() {
	    return 4;
	}
    }

    // 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);
    }

    // INNER CLASS
    public class BuscarAsincrono extends AsyncTask<Integer, Integer, Estacionamiento> {

	private ProgressDialog barraEstado;
	private int id;

	@Override
	protected Estacionamiento doInBackground(Integer... parametros) {
	    id = parametros[0];
	    Estacionamiento est = new Estacionamiento();
	    est = est.buscarPorId(id);
	    if (est.buscarPrecios(id)) {
		est.setPreciosCargados(true);
	    } else {
		est.setPreciosCargados(false);
	    }
	    if (est.buscarServiciosAdicionales(id)) {
		est.setServiciosAdicionalesCargados(true);
	    } else {
		est.setServiciosAdicionalesCargados(false);
	    }
	    if (est.cargarComentarios(id, est.getOffsetComentarios(), Estacionamiento.LIMITE_COMENTARIOS)) {
		est.setComentariosCargados(true);
		est.setOffsetComentarios(est.getOffsetComentarios()+Estacionamiento.LIMITE_COMENTARIOS);
	    } else {
		est.setComentariosCargados(false);
	    }
	    return est;
	}

	@Override
	protected void onPostExecute(Estacionamiento resp) {
	    super.onPostExecute(resp);
	    estacionamiento = resp;
	    estacionamiento.setId(id);
	    inicializarViewPager();
		inicialiarTabs();
	    if (barraEstado.isShowing()) {
		barraEstado.dismiss();
	    }
	}

	@Override
	protected void onPreExecute() {
	    barraEstado = new ProgressDialog(MapaDetalleEstacionamiento.this);
	    barraEstado.setProgressStyle(ProgressDialog.STYLE_SPINNER);
	    barraEstado.setMessage(getString(R.string.cargandoDetalle));
	    barraEstado.setCanceledOnTouchOutside(false);
	    barraEstado.show();
	    super.onPreExecute();
	}
    }

}
