package com.ramos.munoz.tesis;

import java.io.IOException;
import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class Historial {
    private int tieneValoracion;
    private int Valoracion;
    private String nombreEstacionamiento;
    private String fechaEstacionado;
    private int idHistorial;
    private int idEstacionamiento;

    public Historial() {
    }

    public Historial(String nombreEstacionamiento, String fechaEstacionado, int tieneValoracion, int id, int valoracion, int idEstacionamiento) {
	super();
	this.nombreEstacionamiento = nombreEstacionamiento;
	this.fechaEstacionado = fechaEstacionado;
	this.tieneValoracion = tieneValoracion;
	this.Valoracion = valoracion;
	this.idHistorial = id;
	this.idEstacionamiento = idEstacionamiento;
    }

    public static Boolean calificarEstacionamiento(int id, int calificacion, String comentario) {
	Log.d("calificarEstacionamiento", "EMPEZO A CALIFICAR");
	try {
	    ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
	    parametros.add(new BasicNameValuePair("estacionamiento", String.valueOf(id)));
	    parametros.add(new BasicNameValuePair("valoracion", String.valueOf(calificacion)));
	    parametros.add(new BasicNameValuePair("comentario", comentario));
	    parametros.add(new BasicNameValuePair("apodo", Usuario.getDatos().get(Usuario.INDICE_USUARIO).getValue()));
	    parametros.add(new BasicNameValuePair("contrasena", Usuario.getDatos().get(Usuario.INDICE_CONTRASENA).getValue()));

	    ConexionServidor con = new ConexionServidor();
	    JSONObject respuestaJSON = con.ejecutarHttpPost(parametros, ConexionServidor.URL_CALIFICAR_ESTACIONAMIENTO);
	    Boolean resp = respuestaJSON.getBoolean("resultado");
	    if (resp) {
		Log.d("calificarEstacionamiento", "Todo bien");
		return true;
	    }
	} catch (IOException e) {
	    e.printStackTrace();
	    Log.e("calificarEstacionamiento", "ERROR 1: " + e.getMessage() + " : " + e.getCause());
	} catch (JSONException e) {
	    e.printStackTrace();
	    Log.e("calificarEstacionamiento", "ERROR 2: " + e.getMessage() + " : " + e.getCause());
	} catch (Exception e) {
	    e.printStackTrace();
	    Log.e("calificarEstacionamiento", "ERROR 3: " + e.getMessage() + " : " + e.getCause());
	}
	Log.d("calificarEstacionamiento", "Todo bien");
	return false;
    }

    public static HistorialDetalle verDetalle(int idCliente, int idEstacionamiento) {
	Log.d("verDetalle", "EMPEZO A BUSCAR DETALLE");
	try {
	    ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
	    parametros.add(new BasicNameValuePair("cli_id", String.valueOf(idCliente)));
	    parametros.add(new BasicNameValuePair("est_id", String.valueOf(idEstacionamiento)));

	    // parametros.add(new BasicNameValuePair("apodo",
	    // Usuario.getDatos().get(Usuario.INDICE_USUARIO).getValue()));
	    // parametros.add(new BasicNameValuePair("contrasena",
	    // Usuario.getDatos().get(Usuario.INDICE_CONTRASENA).getValue()));
	    boolean esError = true;

	    ConexionServidor con = new ConexionServidor();
	    JSONObject respuestaJSON = con.ejecutarHttpPost(parametros, ConexionServidor.URL_DETALLE_HISTORIAL);
	    esError = respuestaJSON.has("error");
	    if (esError) {
		Log.d("verDetalle", "ERROR: " + respuestaJSON.getString("error"));
	    } else {
		Log.d("RESPUESTA", respuestaJSON.toString());
		JSONObject estacionamientoJSON = respuestaJSON.getJSONObject("respuesta");
		JSONObject estJSON = estacionamientoJSON.getJSONObject("estacionamiento");
		int montoPagado = Integer.parseInt(estJSON.getString("pagado"));
		String fechaEntrada = estJSON.getString("f_entrada");
		String fechaSalida = estJSON.getString("f_salida");
		String patente = estJSON.getString("patente");
		String observacion = estJSON.getString("observacion");
		int montoAPagar = Integer.parseInt(estJSON.getString("monto"));
		ArrayList<ServicioAdicional> servicios = new ArrayList<ServicioAdicional>();
		if (estacionamientoJSON.has("servicios")) {
		    
		    JSONArray serviciosJSON = estacionamientoJSON.getJSONArray("servicios");
		    for (int i = 0; i < serviciosJSON.length(); i++) {
			JSONObject servJSON = serviciosJSON.getJSONObject(i);
			String nombre = servJSON.getString("servicio");
			int valor = servJSON.getInt("valor");
			int id = servJSON.getInt("id");
			ServicioAdicional s = new ServicioAdicional(id, nombre, valor);
			servicios.add(s);
		    }
		}
		HistorialDetalle det = new HistorialDetalle(servicios, montoPagado, fechaEntrada, fechaSalida, patente, observacion, montoAPagar);

		return det;
	    }
	} catch (IOException e) {
	    e.printStackTrace();
	    Log.e("verDetalle", "ERROR 1: " + e.getMessage() + " : " + e.getCause());
	} catch (JSONException e) {
	    e.printStackTrace();
	    Log.e("verDetalle", "ERROR 2: " + e.getMessage() + " : " + e.getCause());
	} catch (Exception e) {
	    e.printStackTrace();
	    Log.e("verDetalle", "ERROR 3: " + e.getMessage() + " : " + e.getCause());
	}
	Log.d("verDetalle", "Todo bien");
	return null;
    }

    public int getTieneValoracion() {
	return tieneValoracion;
    }

    public void setTieneValoracion(int tieneValoracion) {
	this.tieneValoracion = tieneValoracion;
    }

    public int getValoracion() {
	return Valoracion;
    }

    public void setValoracion(int valoracion) {
	Valoracion = valoracion;
    }

    public String getNombreEstacionamiento() {
	return nombreEstacionamiento;
    }

    public void setNombreEstacionamiento(String nombreEstacionamiento) {
	this.nombreEstacionamiento = nombreEstacionamiento;
    }

    public String getFechaEstacionado() {
	return fechaEstacionado;
    }

    public void setFechaEstacionado(String fechaEstacionado) {
	this.fechaEstacionado = fechaEstacionado;
    }

    public int getIdHistorial() {
	return idHistorial;
    }

    public void setIdHistorial(int idHistorial) {
	this.idHistorial = idHistorial;
    }

    public int getIdEstacionamiento() {
	return idEstacionamiento;
    }

    public void setIdEstacionamiento(int idEstacionamiento) {
	this.idEstacionamiento = idEstacionamiento;
    }

}
