package com.ramos.munoz.tesis;

import java.util.concurrent.ExecutionException;

import android.app.Activity;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class HistorialCalificar extends Activity implements OnClickListener {
    private int id;
    private String nombre;
    private Spinner spCalificacion;
    private EditText editComentario;

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

    private void buscarEstacionamiento() {
	BuscarAsincrono buscar = new BuscarAsincrono();
	buscar.execute(id);
    }

    private void inicializarComponentes() {
	spCalificacion = (Spinner) findViewById(R.id.spCalificacion);
	Button btnCancelar = (Button) findViewById(R.id.btnCancelar);
	Button btnGuardar = (Button) findViewById(R.id.btnGuardar);
	editComentario = (EditText) findViewById(R.id.editTxtComentario);
	btnCancelar.setOnClickListener(this);
	btnGuardar.setOnClickListener(this);

	ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, android.R.id.text1);
	spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
	spCalificacion.setAdapter(spinnerAdapter);
	for (int i = 1; i <= 5; i++) {
	    spinnerAdapter.add(String.valueOf(i));
	}
	spinnerAdapter.notifyDataSetChanged();
	Bundle bolsa = getIntent().getExtras();
	id = Integer.parseInt(bolsa.getString("id"));
	nombre = bolsa.getString("nombre");
	setTitle(getResources().getString(R.string.calificar) + " " + nombre);
    }

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

    private void guardarCalificacion() {
	
	String comentario = editComentario.getText().toString();
	int calificacion = spCalificacion.getSelectedItemPosition() + 1;
	int id = this.id;
	Object[] params = { comentario, calificacion, id };
	CalificarEstTask calificarEstTask = new CalificarEstTask();
	calificarEstTask.execute(params);

    }

    public void onClick(View v) {
	switch (v.getId()) {
	    case R.id.btnCancelar:
		this.finish();
		break;
	    case R.id.btnGuardar:
		guardarCalificacion();
		break;
	}
    }

    private class CalificarEstTask extends AsyncTask<Object, Integer, Boolean> {

	@Override
	protected Boolean doInBackground(Object... params) {
	    String comentario = (String) params[0];
	    int calificacion = Integer.parseInt(params[1].toString());
	    int id = Integer.parseInt(params[2].toString());
	    return Historial.calificarEstacionamiento(id, calificacion, comentario);
	}

	@Override
	protected void onPostExecute(Boolean resp) {
	    super.onPostExecute(resp);
	    if (resp) {
		setResult(HistorialActivity.RESPUESTA_ACTUALIZAR_HIST);
		Toast.makeText(HistorialCalificar.this, getString(R.string.calificacionExitosa), Toast.LENGTH_SHORT).show();
		HistorialCalificar.this.finish();
	    } else {
		Toast.makeText(HistorialCalificar.this, getString(R.string.calificacionFallida), Toast.LENGTH_SHORT).show();
	    }
	}

    }

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

	@Override
	protected Estacionamiento doInBackground(Integer... parametros) {
	    publishProgress(0);
	    int id = parametros[0];
	    Estacionamiento est = new Estacionamiento();
	    est = est.buscarPorId(id);
	    publishProgress(100);
	    return est;
	}

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

	@Override
	protected void onPostExecute(Estacionamiento result) {

	}

    }

}
