package com.ramos.munoz.tesis;

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

import com.google.android.gms.internal.af.b;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.Menu;
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.Filter;
import android.widget.Spinner;
import android.widget.Toast;

public class VehiculoAgregar extends Activity implements OnClickListener {

    private EditText patente;
    private EditText marca;
    private EditText modelo;
    private Spinner spCarrocerias;
    private ArrayList<Carroceria> carrocerias;

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

    private void inicializarComponentes() {
	patente = (EditText) findViewById(R.id.editTxtPatente);
	marca = (EditText) findViewById(R.id.editTxtMarca);
	modelo = (EditText) findViewById(R.id.editTxtModelo);

	spCarrocerias = (Spinner) findViewById(R.id.spnCarrocerias);
	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);
	spCarrocerias.setAdapter(spinnerAdapter);
	patente.setFilters(new InputFilter[] { Validacion.filtroPatente, new InputFilter.LengthFilter(8) });
	patente.addTextChangedListener(new TextWatcher() {

	    private boolean guion;

	    @Override
	    public void onTextChanged(CharSequence s, int start, int before, int count) {
		System.out.println("leng " + patente.getText().toString().length());
		if ((start == 1 || start == 4) && before == 0) {
		    guion = true;
		    start++;
		} else {
		    guion = false;
		}
	    }

	    @Override
	    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
		int longi = patente.getText().length();

	    }

	    @Override
	    public void afterTextChanged(Editable s) {
		if (guion) {
		    patente.getText().append("-");

		}
	    }
	});

	CargarCarroceriasTask cargarCarroceriasTask = new CargarCarroceriasTask();
	cargarCarroceriasTask.execute();
	try {
	    carrocerias = cargarCarroceriasTask.get();
	} catch (InterruptedException e) {
	    e.printStackTrace();
	} catch (ExecutionException e) {
	    e.printStackTrace();
	}
	for (Carroceria c : carrocerias) {
	    spinnerAdapter.add(c.getNombre());
	}
	spinnerAdapter.notifyDataSetChanged();

	Button btnRegistrar = (Button) findViewById(R.id.btnRegistrarVehiculo);
	btnRegistrar.setOnClickListener(this);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
	return true;
    }

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

    public void onClick(View v) {
	switch (v.getId()) {
	    case R.id.btnRegistrarVehiculo: {
		registrarVehiculo();
	    }
	}
    }

    private void registrarVehiculo() {
	if (Validacion.isVacio(patente)) {
	    Toast.makeText(this, "Ingrese una patente", Toast.LENGTH_SHORT).show();
	    return;
	}
	if (Validacion.isVacio(marca)) {
	    Toast.makeText(this, "Ingrese una marca", Toast.LENGTH_SHORT).show();
	    return;
	}
	if (Validacion.isVacio(modelo)) {
	    Toast.makeText(this, "Ingrese un modelo", Toast.LENGTH_SHORT).show();
	    return;
	}

	String usuario = Usuario.getDatos().get(Usuario.INDICE_USUARIO).getValue();
	String contrasena = Usuario.getDatos().get(Usuario.INDICE_CONTRASENA).getValue();
	String patente = this.patente.getText().toString();
	String marca = this.marca.getText().toString();
	String modelo = this.modelo.getText().toString();
	int carroceria = carrocerias.get(spCarrocerias.getSelectedItemPosition()).getId();

	RegistrarVehiculoTask registrarVehiculoTask = new RegistrarVehiculoTask();
	Object[] params = { usuario, contrasena, patente, modelo, marca, carroceria };
	registrarVehiculoTask.execute(params);

    }

    class CargarCarroceriasTask extends AsyncTask<Object, Integer, ArrayList<Carroceria>> {

	@Override
	protected ArrayList<Carroceria> doInBackground(Object... params) {
	    return Carroceria.cargarCarrocerias();
	}

    }

    class RegistrarVehiculoTask extends AsyncTask<Object, Integer, Boolean> {

	private ProgressDialog barraEstado;

	@Override
	protected Boolean doInBackground(Object... params) {
	    String usuario = (String) params[0];
	    String contrasena = (String) params[1];
	    String patente = (String) params[2];
	    String modelo = (String) params[3];
	    String marca = (String) params[4];
	    
	    int carroceria = Integer.parseInt(String.valueOf(params[5].toString()));
	    return Vehiculo.registrarVehiculo(usuario, contrasena, patente.toUpperCase(), modelo, marca, carroceria);
	}

	protected void onPreExecute() {
	    barraEstado = new ProgressDialog(VehiculoAgregar.this);
	    barraEstado.setProgressStyle(ProgressDialog.STYLE_SPINNER);
	    barraEstado.setMessage(getString(R.string.registrandoVehiculo));
	    barraEstado.show();
	    barraEstado.setCanceledOnTouchOutside(false);
	}

	@Override
	protected void onPostExecute(Boolean resp) {
	    if (resp) {
		setResult(VehiculoActivity.RESPUESTA_VEHICULOS);
		Toast.makeText(VehiculoAgregar.this, "Vehículo registrado", Toast.LENGTH_SHORT).show();
		finish();

	    } else {
		Toast.makeText(VehiculoAgregar.this, "No se pudo Registrar", Toast.LENGTH_SHORT).show();
	    }
	    barraEstado.dismiss();
	}

    }
}
