package com.ramos.munoz.tesis;

import java.util.ArrayList;
import java.util.concurrent.ExecutionException;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MapaDetalleTab4 extends Fragment implements OnClickListener {
    private static Context contexto;
    private static Estacionamiento estacionamiento;
    private static ArrayList<Comentario> comentarios;
    private ViewGroup padre;
    private LayoutInflater inflater;
    private LinearLayout llPadre;

    public static Fragment nuevaInstancia(Context contexto, Estacionamiento estacionamiento) {
	MapaDetalleTab4.contexto = contexto;
	MapaDetalleTab4 f = new MapaDetalleTab4();
	MapaDetalleTab4.estacionamiento = estacionamiento;
	return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
	padre = (ViewGroup) inflater.inflate(R.layout.mapa_detalle_tab4, null);
	llPadre = (LinearLayout) padre.findViewById(R.id.llDetalleTab);

	this.inflater = inflater;
	Button b = (Button) padre.findViewById(R.id.btnBuscarComentarios);
	b.setOnClickListener(this);

	if (estacionamiento.comentariosCargados()) {
	    comentarios = estacionamiento.getComentarios();
	    for (int i = 0; i < comentarios.size(); i++) {
		iniciarVistas(i);
	    }
	} else {
	    ViewGroup v = (ViewGroup) inflater.inflate(R.layout.mapa_detalle_estacionamiento_plantilla_sin_datos, null);
	    TextView t = (TextView) v.findViewById(R.id.txtMsgeSinDato);
	    t.setText(String.format(getString(R.string.msgeSinDato), getString(R.string.comentarios)));
	    llPadre.addView(v);
	    llPadre.removeView(b);

	}
	return padre;
    }

    public void iniciarVistas(int i) {
	View v = inflater.inflate(R.layout.mapa_detalle_tab4_plantilla, null, false);
	TextView txtUsuario = (TextView) v.findViewById(R.id.txtUsuario);
	TextView txtComentario = (TextView) v.findViewById(R.id.txtComentario);
	TextView txtCalificacion = (TextView) v.findViewById(R.id.txtCalificacion);
	TextView txtechaCalificacion = (TextView) v.findViewById(R.id.txtFechaCalificacion);

	String usuario = comentarios.get(i).getUsuario();
	String comentario = comentarios.get(i).getComentario();
	String calificacion = String.valueOf(comentarios.get(i).getValoracion());
	String fechaCalificacion = comentarios.get(i).getFechaComentario();
	String[] fechaYHora = fechaCalificacion.split(" ");

	usuario = String.format(getString(R.string.msgeUsuario), usuario);
	calificacion = String.format(getString(R.string.msgeCalificacion, calificacion));
	fechaCalificacion = String.format(getString(R.string.msgeFechaCalificacion, fechaYHora[1], fechaYHora[0]));

	txtUsuario.setText(usuario);
	txtComentario.setText(comentario);
	txtCalificacion.setText(calificacion);
	txtechaCalificacion.setText(fechaCalificacion);
	llPadre.addView(v, 1);
    }

    private void aumentarOffset() {
	System.out.println("ANTES: " +estacionamiento.getOffsetComentarios());
	estacionamiento.setOffsetComentarios(estacionamiento.getOffsetComentarios() + Estacionamiento.LIMITE_COMENTARIOS);
	System.out.println("AHORA: " +estacionamiento.getOffsetComentarios());

    }

    public void onClick(View v) {
	switch (v.getId()) {
	    case R.id.btnBuscarComentarios:
		cargarComentariosTask cargarTask = new cargarComentariosTask();
		Toast.makeText(contexto, "Cargando comentarios...", Toast.LENGTH_SHORT).show();
		cargarTask.execute(estacionamiento);
	}
    }

    public class cargarComentariosTask extends AsyncTask<Estacionamiento, Integer, Boolean> {

	Boolean nuevosComentarios = false;

	@Override
	protected Boolean doInBackground(Estacionamiento... parametros) {
	    int id = estacionamiento.getId();
	    if (estacionamiento.cargarComentarios(id, estacionamiento.getOffsetComentarios(), Estacionamiento.LIMITE_COMENTARIOS)) {
		estacionamiento.setComentariosCargados(true);
		nuevosComentarios = true;
		return true;
	    } else {
		estacionamiento.setComentariosCargados(false);
		return false;
	    }

	}

	@Override
	protected void onPostExecute(Boolean res) {
	    super.onPostExecute(res);
	    if (nuevosComentarios) {
		comentarios = estacionamiento.getComentarios();
		for (int i = 0; i < comentarios.size(); i++) {
		    iniciarVistas(i);
		}
		aumentarOffset();

	    }
	}

	@Override
	protected void onPreExecute() {
	    // TODO Auto-generated method stub
	    super.onPreExecute();
	}

    }
}
