package com.ramos.munoz.tesis;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.InputType;
import android.text.method.PasswordTransformationMethod;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TableLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

public class PerfilEditarCampo extends Activity implements OnClickListener {

    private TextView campo;
    private EditText valorCampo;
    private String valorCampoAntiguo;
    private Button cancelar;
    private Button guardar;
    private boolean bandera;
    private EditText editTxtPass1;
    private EditText editTxtPass2;

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

    private void inicializarComponentes() {
	cancelar = (Button) findViewById(R.id.btnCancelar);
	guardar = (Button) findViewById(R.id.btnGuardar);
	cancelar.setOnClickListener(this);
	guardar.setOnClickListener(this);

	campo = (TextView) findViewById(R.id.txtCampo);
	valorCampo = (EditText) findViewById(R.id.txtValorCampo);
	Bundle extras = getIntent().getExtras();
	String nombreCampo = extras.getString("campo");
	String valorCampoString = extras.getString("valorCampo");
	valorCampoAntiguo = valorCampoString;
	campo.setText(nombreCampo);
	valorCampo.setHint(valorCampoString);
	if (nombreCampo.equals("Contraseña")) {
	    valorCampo.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

	    valorCampo.setHint("");
	    agregarVistas();
	} else if (nombreCampo.equals("Celular")) {
	    valorCampo.setInputType(InputType.TYPE_CLASS_PHONE);
	} else if (nombreCampo.equals("Correo")) {
	    valorCampo.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
	}

    }

    private void agregarVistas() {
	LinearLayout llEditarCampo = (LinearLayout) findViewById(R.id.llEditarCampo);
	TextView txtPass1 = new TextView(this);
	TextView txtPass2 = new TextView(this);
	editTxtPass1 = new EditText(this);
	editTxtPass2 = new EditText(this);

	editTxtPass1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
	editTxtPass2.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
	txtPass1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
	txtPass2.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

	editTxtPass1.setTransformationMethod(new PasswordTransformationMethod());
	editTxtPass2.setTransformationMethod(new PasswordTransformationMethod());
	txtPass1.setText(R.string.nuevaPass);
	txtPass2.setText(R.string.nuevaPass2);

	llEditarCampo.addView(txtPass1, 0);
	llEditarCampo.addView(editTxtPass1, 1);
	llEditarCampo.addView(txtPass2, 2);
	llEditarCampo.addView(editTxtPass2, 3);
    }

    public void onClick(View v) {
	switch (v.getId()) {
	    case R.id.btnGuardar: {

		guardarCampo();
	    }
		break;
	    case R.id.btnCancelar: {
		this.finish();
	    }
		break;
	}
    }

    private void guardarCampo() {
	String campo = this.campo.getText().toString();
	String valor = this.valorCampo.getText().toString();
	if (campo.equals("Contraseña")) {
	   
	    if (Validacion.isVacio(editTxtPass1)) {
		Toast.makeText(this, "Ingrese nueva contraseña", Toast.LENGTH_SHORT).show();
		return;
	    }
	    if (Validacion.isVacio(editTxtPass2)) {
		Toast.makeText(this, "Ingrese nuevamente la contraseña", Toast.LENGTH_SHORT).show();
		return;
	    }
	    if (!editTxtPass1.getText().toString().equals(editTxtPass2.getText().toString())) {
		Toast.makeText(this, "Las contraseñas no coinciden", Toast.LENGTH_SHORT).show();
		return;
	    }
	    if (Validacion.isVacio(valorCampo)) {
		Toast.makeText(this, "Ingrese contraseña actual", Toast.LENGTH_SHORT).show();
		return;
	    }
	    valor = editTxtPass1.getText().toString();
	    Usuario.setContrasenaNueva(valor);
	}

	else if (campo.equals("Nombre")) Usuario.setNombre(valor);
	else if (campo.equals("Apellido materno")) Usuario.setApMaterno(valor);
	else if (campo.equals("Apellido paterno")) Usuario.setApPaterno(valor);
	else if (campo.equals("Celular")) Usuario.setCelular(valor);
	else if (campo.equals("Correo")) Usuario.setEmail(valor);
	bandera = campo.equals("Contraseña");
	GuardarCambiosTask guardarTask = new GuardarCambiosTask();
	guardarTask.execute(bandera);
    }

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

    class GuardarCambiosTask extends AsyncTask<Boolean, Integer, Boolean> {

	private ProgressDialog barraEstado;

	@Override
	protected Boolean doInBackground(Boolean... params) {
	    Boolean bandera = params[0];
	    return Usuario.guardarCambios(bandera);
	}

	@Override
	protected void onPostExecute(Boolean resp) {
	    super.onPostExecute(resp);
	    String campo = PerfilEditarCampo.this.campo.getText().toString();
	    String valor = valorCampo.getText().toString();

	    if (resp) {
		Toast.makeText(PerfilEditarCampo.this, getString(R.string.guardando), Toast.LENGTH_LONG).show();
		setResult(PerfilActivity.RESPUESTA_PERFIL);
		if (bandera) {
		    valor = editTxtPass1.getText().toString();
		    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
		    SharedPreferences.Editor editPrefs = prefs.edit();
		    editPrefs.remove("editPassword");
		    editPrefs.putString("editPassword", valor);
		    Usuario.setContrasena(valor);
		}
		finish();
	    } else {
		if (campo.equals("Contrasena")) Usuario.setContrasena(valorCampoAntiguo);
		else if (campo.equals("Nombre")) Usuario.setNombre(valorCampoAntiguo);
		else if (campo.equals("Apellido materno")) Usuario.setApMaterno(valorCampoAntiguo);
		else if (campo.equals("Apellido paterno")) Usuario.setApPaterno(valorCampoAntiguo);
		else if (campo.equals("Celular")) Usuario.setCelular(valorCampoAntiguo);
		else if (campo.equals("Correo")) Usuario.setEmail(valorCampoAntiguo);
		Toast.makeText(PerfilEditarCampo.this, getString(R.string.guardarFail), Toast.LENGTH_LONG).show();
	    }
	    barraEstado.dismiss();
	}

	@Override
	protected void onPreExecute() {
	    barraEstado = new ProgressDialog(PerfilEditarCampo.this);
	    barraEstado.setProgressStyle(ProgressDialog.STYLE_SPINNER);
	    barraEstado.setMessage(getString(R.string.guardando));
	    barraEstado.show();
	    barraEstado.setCanceledOnTouchOutside(false);
	}

    }

}
