package com.ramos.munoz.tesis;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;

public class HistorialActivity extends Activity implements OnClickListener {

    private static final int LIMITE = 5;
    private static int offset;
    private ListView lista;
    private ArrayList<Estacionamiento> datos;
    private adaptadorListaHistorial adaptador;
    private Context contexto;
    public static final int RESPUESTA_ACTUALIZAR_HIST = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {

	contexto = this;
	offset = 0;
	super.onCreate(savedInstanceState);
	setContentView(R.layout.historial_activity);
	inicializarComponentes();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	if (requestCode == RESPUESTA_ACTUALIZAR_HIST) {
	    if (resultCode == RESPUESTA_ACTUALIZAR_HIST) {
		cargarLista();
	    }
	}
    }

    private void inicializarComponentes() {

	lista = (ListView) findViewById(R.id.listViewHistorial);
	Button botonCargar = new Button(this);
	botonCargar.setText("Cargar Más");
	botonCargar.setOnClickListener(this);
	botonCargar.setId(89);
	lista.addFooterView(botonCargar);
	// lista.setOnItemClickListener(new OnItemClickListener() {
	//
	// public void onItemClick(AdapterView<?> parent, View v, int arg2, long
	// arg3) {
	// TextView calificacion = (TextView)
	// v.findViewById(R.id.txtValoracion);
	// TextView id = (TextView) v.findViewById(R.id.imgBtnEstacionamiento);
	// TextView nombre = (TextView)
	// v.findViewById(R.id.txtNombreEstacionamiento);
	// String cal = calificacion.getText().toString();
	// if (cal.equals(getResources().getString(R.string.calificacion) + " "
	// + getResources().getString(R.string.pulseParaCalificar))) {
	// Log.d("CLICK", "CLick en : " + id.getText().toString());
	// Intent detalle = new Intent(contexto, HistorialCalificar.class);
	// Bundle bolsa = new Bundle();
	// bolsa.putString("id", id.getText().toString());
	// bolsa.putString("nombre", nombre.getText().toString());
	// detalle.putExtras(bolsa);
	// startActivityForResult(detalle, RESPUESTA_ACTUALIZAR_HIST);
	// }
	// }
	// });
	cargarLista();

    }

    private void cargarLista() {
	cargarListaAsincrono hiloCargarLista = new cargarListaAsincrono();
	hiloCargarLista.execute();
    }

    public void onClick(View v) {
	switch (v.getId()) {
	    case 89: {
		offset = offset + LIMITE;
		cargarLista();
	    }
	}
    }

    // INNER CLASS
    class cargarListaAsincrono extends AsyncTask<String, Integer, Boolean> {

	private ArrayList<Historial> estacionamientosVisitados;
	private ProgressDialog barraEstado;

	@Override
	protected Boolean doInBackground(String... params) {
	    estacionamientosVisitados = Usuario.verHistorial(offset, LIMITE);
	    return true;
	}

	@Override
	protected void onPostExecute(Boolean result) {
	    if (offset == 0) {
		adaptador = new adaptadorListaHistorial(contexto, R.layout.historial_listview, estacionamientosVisitados);
		lista.setAdapter(adaptador);
	    } else {
		for (int i = 0; i < estacionamientosVisitados.size(); i++) {
		    adaptador.add(estacionamientosVisitados.get(i));

		}
		adaptador.notifyDataSetChanged();
	    }
	    barraEstado.dismiss();
	}

	@Override
	protected void onPreExecute() {
	    barraEstado = new ProgressDialog(HistorialActivity.this);
	    barraEstado.setProgressStyle(R.style.spinnerStyle);
	    barraEstado.setMessage(getString(R.string.cargandoHistorial));

	    barraEstado.show();
	    barraEstado.setCanceledOnTouchOutside(false);
	}
    }

    public class adaptadorListaHistorial extends ArrayAdapter<Historial> {

	private Context contexto;
	private int layout;
	private ArrayList<Historial> datos = null;
	private HistorialHolder holder;
	private Historial historiales;
	private OnClickListener infoClickListener;
	private OnClickListener calificarClickListener;

	public adaptadorListaHistorial(Context context, int layout, ArrayList<Historial> historial) {
	    super(context, layout, historial);
	    this.layout = layout;
	    this.contexto = context;
	    this.datos = historial;
	    infoClickListener = new OnClickListener() {
		@Override
		public void onClick(View v) {
		    Historial h = datos.get(v.getId());
		    Log.d("ID", "EL ID: " + historiales.getIdEstacionamiento());
		    Intent detalle = new Intent(contexto, HistorialDetalleActivity.class);
		    Bundle bolsa = new Bundle();
		    bolsa.putInt("idCliente", h.getIdHistorial());
		    bolsa.putInt("idEstacionamiento", h.getIdEstacionamiento());
		    bolsa.putString("nombre", h.getNombreEstacionamiento());
		    detalle.putExtras(bolsa);
		    startActivity(detalle);
		}
	    };
	    
	    calificarClickListener = new OnClickListener() {
		@Override
		public void onClick(View v) {
		    Historial h = datos.get(v.getId());

		    Intent detalle = new Intent(contexto, HistorialCalificar.class);
		    Bundle bolsa = new Bundle();
		    bolsa.putString("id", String.valueOf(h.getIdEstacionamiento()));
		    bolsa.putString("nombre", h.getNombreEstacionamiento());
		    detalle.putExtras(bolsa);
		    startActivityForResult(detalle, RESPUESTA_ACTUALIZAR_HIST);
		}
	    };
	}

	@Override
	public View getView(int position, View fila, ViewGroup parent) {
	    holder = new HistorialHolder();

	    LayoutInflater inflater = (LayoutInflater) contexto.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	    fila = inflater.inflate(layout, parent, false);

	    holder = new HistorialHolder();
	    holder.nombreEstacionamiento = (TextView) fila.findViewById(R.id.txtNombreEstacionamiento);
	    holder.fechaEstacionado = (TextView) fila.findViewById(R.id.txtFechaEstacionado);
	    holder.valoracion = (TextView) fila.findViewById(R.id.txtValoracion);
	    holder.idEstacionamiento = (TextView) fila.findViewById(R.id.imgBtnEstacionamiento);
	    holder.imgInfo = (ImageButton) fila.findViewById(R.id.imgBtnInfoHistorial);
	    holder.imgCalificar = (ImageButton) fila.findViewById(R.id.imgBtnCalificar);
	    holder.imgCalificar.setId(position);
	    holder.imgInfo.setId(position);

	    historiales = datos.get(position);

	    holder.idEstacionamiento.setText(String.valueOf(historiales.getIdEstacionamiento()));
	    holder.nombreEstacionamiento.setText(historiales.getNombreEstacionamiento());
	    holder.fechaEstacionado.setText(String.format(getString(R.string.msgeFechaHistorial, historiales.getFechaEstacionado())));
	    String val;

	    if (historiales.getTieneValoracion() == 0) {
		val = "Sin calificación";
	    } else {
		val = historiales.getValoracion() + "/5";
		holder.imgCalificar.setVisibility(View.INVISIBLE);
	    }
	    holder.valoracion.setText(getResources().getString(R.string.calificacion) + " " + val);

	    holder.imgInfo.setOnClickListener(infoClickListener);

	    holder.imgCalificar.setOnClickListener(calificarClickListener);
	    return fila;
	}
    }

    public class HistorialHolder {
	TextView nombreEstacionamiento;
	TextView fechaEstacionado;
	TextView valoracion;
	TextView idEstacionamiento;
	ImageButton imgInfo;
	ImageButton imgCalificar;

    }

}
