package pfc.android.gestormensajeria.activities;

import java.util.HashMap;
import java.util.Map;

import pfc.android.gestormensajeria.R;
import pfc.android.gestormensajeria.dao.GestorMensajeriaDAO;
import pfc.android.gestormensajeria.dao.GestorMensajeriaDBAdapter;
import pfc.android.gestormensajeria.entidades.ParametroConfiguracion;
import pfc.android.gestormensajeria.parametros.ParametrosNavegacion;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;

/**
 * Activity para el manejo de todo lo referente a los parámetros de configuración necesarios para el correcto funcionamiento  de la aplicación.
 * @author Francisco José Lamela Rincón
 *
 */
public class ConfiguracionActivity extends Activity {
	
	/**
	 * Propiedad para manejar el control con el que se dará valor al email origen que se usará como remitente de la copia de seguridad
	 */
	private EditText emailOrigen;

	/**
	 * Propiedad para manejar el control con el que se dará valor al password del email origen que se usará como remitente de la copia de seguridad
	 */
	private EditText passwdEmailOrigen;
	
	/**
	 * Propiedad para manejar el control con el que se dará valor al email destino de la copia de seguridad
	 */
	private EditText emailDestino;
	
	/**
	 * Propiedad para manejar el control con el que se dará valor al número de teléfono móvil destino del SMS de alerta
	 */
	private EditText numeroDestinoMensaje;
	
	/**
	 * Propiedad para manejar el control con el que se dará valor al contenido del SMS de alerta
	 */
	private EditText mensajeAlerta;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_configuracion);
		
		//Obtenemos las vistas que se van a manipular en la pantalla de configuración
		emailOrigen = (EditText) findViewById(R.id.editEmailOrigen);
		passwdEmailOrigen = (EditText) findViewById(R.id.editPasswdE_mailOrigen);
		emailDestino = (EditText) findViewById(R.id.editEmailDestino);
		numeroDestinoMensaje = (EditText) findViewById(R.id.editNumeroDestinoMensaje);
		mensajeAlerta = (EditText) findViewById(R.id.editMensajeAlerta);
		
		//Cargamos los datos de configuracion
		cargarDatosConfiguracion();
		
		//Establecemos el evento onclick de los botones
		final View btnAceptar = findViewById(R.id.btnGuardarConfiguracion);
		btnAceptar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				guardarDatosConfiguracion();				
			}
		});
		
		
		//Establecemos el comportamiento al pulsar sobre el boton de incluir contacto
		final View cvIncluirContacto = findViewById(R.id.btnIncluirContactoConfg);
		cvIncluirContacto.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {
				//Creamos el Intent
	            Intent intent = new Intent(ConfiguracionActivity.this, ListaContactosActivity.class);
	            //Iniciamos la nueva actividad
	            startActivityForResult(intent, ParametrosNavegacion.CONTACTO_OK);
			}
		});
	}
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.configuracion_menu, menu);
		return true;
	}
	
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
        case R.id.action_guardar_config:
        	guardarDatosConfiguracion();
        	return true;
        default:
            return super.onOptionsItemSelected(item);
		}
	}

	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		if(resultCode == ParametrosNavegacion.CONTACTO_OK){
	        //Obtenemos el numero del contacto
			Bundle b = data.getExtras();
			String numeroContacto = b.getString(ParametrosNavegacion.CONTACTO_NUMERO);
	        
			//Lo establecemos como valor del campo adecuado de configuracion
			numeroDestinoMensaje.setText(numeroContacto);
		}
	}
		
	
	// ***********************  METODOS AUXILIARES  ***********************
	
	/**
	 * Consulta en la base de datos los valores establecidos para los parámetros de configuración y asigna estos valores en sus respectivos controles para su edición 
	 */
	private void cargarDatosConfiguracion() {
		//Obtenemos los todos los parametros definidos en el sistema
		Map<String, ParametroConfiguracion> mapaParametros = GestorMensajeriaDAO.obtenerParametrosConfiguracion(this);
		
		if(mapaParametros != null && mapaParametros.size() > 0){
			//Cargamos el email de origen
			ParametroConfiguracion parametro = mapaParametros.get(GestorMensajeriaDBAdapter.CODIGO_EMAIL_ORIGEN);
			if(parametro != null)
	      		emailOrigen.setText(parametro.getValor());
			
			//Cargamos el password
			parametro = mapaParametros.get(GestorMensajeriaDBAdapter.CODIGO_PASSWD_EMAIL_ORIGEN);
			if(parametro != null)
				passwdEmailOrigen.setText(parametro.getValor());
			
			//Cargamos el email destino
			parametro = mapaParametros.get(GestorMensajeriaDBAdapter.CODIGO_EMAIL_DESTINO);
			if(parametro != null)
				emailDestino.setText(parametro.getValor());
			
			//Cargamos el número destino de la alerta
			parametro = mapaParametros.get(GestorMensajeriaDBAdapter.CODIGO_CONTACTO_ALERTA);
			if(parametro != null)
				numeroDestinoMensaje.setText(parametro.getValor());
			//Cargamos el mensaje de la alerta
			parametro = mapaParametros.get(GestorMensajeriaDBAdapter.CODIGO_MENSAJE_ALERTA);
			if(parametro != null)
				mensajeAlerta.setText(parametro.getValor());
		}
	}
	
	
	/**
	 * Recoge los valores introducidos en los campos de la activity de configuración y actualiza los parámetros correspondientes en la base de datos
	 */
	private void guardarDatosConfiguracion() {
		if(comprobarDatosCorrectos()){
			//Creamos un mapa indexado por el código y con valor el valor dado al parámetro
			Map<String, String> mapaParametros = new HashMap<String, String>();
			
			//Guardamos los valores en el mapa
			mapaParametros.put(GestorMensajeriaDBAdapter.CODIGO_EMAIL_ORIGEN, emailOrigen.getText().toString());
			mapaParametros.put(GestorMensajeriaDBAdapter.CODIGO_PASSWD_EMAIL_ORIGEN, passwdEmailOrigen.getText().toString());
			mapaParametros.put(GestorMensajeriaDBAdapter.CODIGO_EMAIL_DESTINO, emailDestino.getText().toString());
			mapaParametros.put(GestorMensajeriaDBAdapter.CODIGO_CONTACTO_ALERTA, numeroDestinoMensaje.getText().toString());
			mapaParametros.put(GestorMensajeriaDBAdapter.CODIGO_MENSAJE_ALERTA, mensajeAlerta.getText().toString());
			
			//Guardamos los valores pasandolos en el mapa
			GestorMensajeriaDAO.guardarParametrosConfiguracion(this, mapaParametros);
			
			Toast.makeText(this.getApplicationContext(), R.string.toast_config_guardada_ok, Toast.LENGTH_LONG).show();
			finish();
		}else{
			Toast.makeText(this.getApplicationContext(), R.string.toast_config_guardada_no_ok, Toast.LENGTH_LONG).show();
		}


	}

	
	/**
	 * Comprueba que los campos no estén vacíos
	 * @return
	 */
	private boolean comprobarDatosCorrectos() {
		return emailOrigen.getText() != null && 
			   !emailOrigen.getText().toString().equals("") &&
			   emailDestino.getText() != null &&
			   !emailDestino.getText().toString().equals("") &&
			   passwdEmailOrigen.getText() != null &&
			   !passwdEmailOrigen.getText().toString().equals("") &&
			    numeroDestinoMensaje.getText() != null &&
			   !numeroDestinoMensaje.getText().toString().equals("") &&
			   mensajeAlerta.getText() != null &&
			   !mensajeAlerta.getText().toString().equals("");
	}

}
