package pfc.android.gestormensajeria.dao;

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

import pfc.android.gestormensajeria.entidades.ParametroConfiguracion;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;

/**
 * Clase para el acceso a los datos de parámetros de configuración. Será la única encargada de acceder a BD para todo lo relacionado con los parámetros. Para ello se apoya en la clase GestorMensajeriaDBAdapter.
 * @author Francisco José Lamela Rincón
 * 
 */
public class ConfiguracionDAO {
	/**
	 * Propiedad de tipo GestorMensajeriaDBAdapter para manejar los accesos a BD
	 */
	private GestorMensajeriaDBAdapter dbAdapter;
	
	
	/**
	 * Devuelve el valor del parámetro cuyo código se pasa en la llamada
	 * @param context
	 * @param codigo
	 * @return
	 */
	public String obtenerValorParametroConfiguracion(Context context, String codigo){
		String valor = null;
		if(dbAdapter == null)
			dbAdapter = new GestorMensajeriaDBAdapter(context);
		
		dbAdapter.abrir();
		
		Cursor cursor = dbAdapter.getParametroPorCodigo(codigo);
      	if(cursor != null){
      		valor = cursor.getString(cursor.getColumnIndex(GestorMensajeriaDBAdapter.PARAMETROS_VALOR));
      		cursor.close();
      	}
		
      	dbAdapter.cerrar();
      	
		return valor;
	}
	
	
	/**
	 * Devuelve un mapa indexado por el código del parámetro y como valor en parámetro en si dentro de un objeto de tipo ParametroConfiguracion
	 * @param context
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public Map<String, ParametroConfiguracion> obtenerParametrosConfiguracion(Context context){
		Map<String, ParametroConfiguracion> mapaParametros = new HashMap<String, ParametroConfiguracion>();

		if(dbAdapter == null)
			dbAdapter = new GestorMensajeriaDBAdapter(context);
		
		dbAdapter.abrir();
		
		Cursor cursorParametros = dbAdapter.getParametros();

		((Activity)context).startManagingCursor(cursorParametros);
			
		//Recorremos el cursor y obtenemos los datos
		if(cursorParametros.moveToFirst()){
		
			for(int i=0; i<cursorParametros.getCount(); i++){

				//Obtenemos los datos del parametro
				String codigo = cursorParametros.getString(cursorParametros.getColumnIndexOrThrow(GestorMensajeriaDBAdapter.PARAMETROS_CODIGO)).toString();
				String valor = cursorParametros.getString(cursorParametros.getColumnIndexOrThrow(GestorMensajeriaDBAdapter.PARAMETROS_VALOR)).toString();
				String descripcion = cursorParametros.getString(cursorParametros.getColumnIndexOrThrow(GestorMensajeriaDBAdapter.PARAMETROS_DESCRIPCION)).toString();
				
				//Añadimos al resultado de la consulta
				mapaParametros.put(codigo, new ParametroConfiguracion(codigo, valor, descripcion));
				
				//Nos vamos al siguiente elemento del cursor
				cursorParametros.moveToNext();
			}
		}
		
		((Activity)context).stopManagingCursor(cursorParametros);
		
      	dbAdapter.cerrar();
      	
		return mapaParametros;
	}
	
	
	/**
	 * Guarda en BD los cambios realizados en los parámetros
	 * @param context
	 * @param mapaParametros
	 */
	public void guardarParametrosConfiguracion(Context context, Map<String, String> mapaParametros){
		if(dbAdapter == null)
			dbAdapter = new GestorMensajeriaDBAdapter(context);
		
		dbAdapter.abrir();

		//Creamos un contentValues para guardar los datos nuevos
		ContentValues reg = new ContentValues();
		for(String codigo: mapaParametros.keySet()){
			reg.clear();			
			reg.put(GestorMensajeriaDBAdapter.PARAMETROS_CODIGO, codigo);
			reg.put(GestorMensajeriaDBAdapter.PARAMETROS_VALOR, mapaParametros.get(codigo));
			dbAdapter.updateConfiguracion(reg);
		}

		dbAdapter.cerrar();
	}
}
