/**
*   @Autor                  T.S.U Gerson Hernández Hernández
*   @Versión                1.0
*   @Fecha creación         18/01/2016
*   @Última actualización   31/03/2016
*   
*   Esta clase implementa la funcionalidad necesaria para recuperar 
*   información de la base de datos.
*/

// Evento que se inicializa una vez cargado la librería Cordova.js corrctamente
document.addEventListener('deviceready', this.onDeviceReady, false);
/**
 * Método que sóo verifca si hay conexión a internet
 */
function onDeviceReady(){
    if(fnVerficarConexion()){
        fnMostrarMensaje('Aviso','Conéctate a internet para hacer tu registro');
    }
}


/********************** Configuración Global App ***********************/
App.setDefaultTransition('slide-up');

var MePremioData = {
    perfil		: {
        id 			: "",
        nombre 		: "",
        apellidos 	: "",
        correo		: "",
        llave		: ""
    },
    negocios	: [],
    puntos		: [],
    mensajes	: [],
    descargas	: [],
    fecha		: "0000-00-00"
};

var idMePremioData = "_mepremio_";
var idClave = "_key_";
var idCorreo = "_correo_";
var idMensajes = "_mensajes_";

var likeUrl = "";
var ganados = 0;
var adicionales = 0;
var likeRespuesta = false;
var datoCodificado = "";

/********************** Fin Configuración Global App ***********************/

/**
 * Método que recibe datos del usuario para autenticar mediante Ajax
 * @param string correo Correo del usuario
 * @param string pass   Contraseña del usuario
 */
function fnObtenerJSON(correo,pass){
    $.ajax({
        data:{
            correo : correo || (MePremioData.perfil.correo || "0"),
            applogin : pass ? 1 : 0,
            llave : pass ? pass : (MePremioData.perfil.llave || "0"),
            fecha : MePremioData.fecha || "0000-00-00"
        },
        url : "http://www.mepremio.com/app/datos",
        type : "POST",
        async : false,
        success : function(datos){
            var jsonTemp=JSON.stringify(datos);
            jsonTemp=$.parseJSON(jsonTemp);
            if("error" in jsonTemp){
                fnMostrarMensaje('Error',jsonTemp.error);
                return;
            }
            MePremioData=jsonTemp;
            localStorage.setItem(idMePremioData,JSON.stringify(MePremioData));
            localStorage.setItem(idClave,window.btoa(pass));
            localStorage.setItem(idCorreo,window.btoa(correo));
        },
        error : function(){
        }
    });
}

window.onload = fnVerificarMePremioData();

/**
 * Función que verifica sí existe un {localStorage} y si no crear el {localStorage}
 */
function fnVerificarMePremioData(){
    if(!localStorage.getItem(idMePremioData)) {
        localStorage.getItem(idMePremioData);
        localStorage.getItem(idClave);
        localStorage.getItem(idCorreo);
        localStorage.getItem(idMensajes);
        localStorage.setItem(idClave,'');
        localStorage.setItem(idCorreo,'');
        localStorage.setItem(idMensajes,'');
        localStorage.setItem(idMePremioData,JSON.stringify(MePremioData));
        fnVerificarMePremioData();
    }
    else{
        MePremioData = JSON.parse(localStorage.getItem(idMePremioData));
        
        fnObtenerJSON(window.atob(localStorage.getItem(idCorreo)) , window.atob(localStorage.getItem(idClave)));
    }
}

/**
 * Función que verifica si hay una conexión a internet y retornar un resultado
 * @returns {boolean} Retorna true si es una conexión desconocida o false una conocida
 */
function fnVerficarConexion(){
    var networkState = navigator.connection.type;

    if (networkState == "none" || networkState == "unknonwm"){
        return true;
    }
    else{
        return false;
    }        
}

/*********************** Procesos de Logout ***************************/
/**
 * Función para cerrar la sesión del usuario, eliminando datos almacenados
 */
function fnLogout(){
    MePremioData.perfil.id = "";
    MePremioData.perfil.nombre = "";
    MePremioData.perfil.apellidos = "";
    MePremioData.perfil.correo = "";
    MePremioData.perfil.llave = "";
    MePremioData.puntos = [];
    MePremioData.mensajes = [];
    localStorage.setItem(idMePremioData,JSON.stringify(MePremioData));
    localStorage.setItem(idClave,'');
    localStorage.setItem(idCorreo,'');

    App.load('pgPrincipal');
    
    fnBorrarHistorialNavegacion();
}
/*********************** Procesos de Registro ***************************/
function fnRegistro(){
    var nombre=$("#nombre").val();
    var apellidos=$("#apellidos").val();
    var fecha=$("#fecha").val();
    var sexo=$('input:radio[name=sexo]:checked').val();
    var correo=$("#correoRegistro").val();
    var pass=$("#passResgistro").val();

    var datos = {
        nombre : nombre,
        apellidos : apellidos,
        correo : correo,
        fecha_de_nacimiento : fecha,
        sexo : sexo,
        clave : pass
    };
    enviar(datos);
}
var enviar = function(datos){
    var correo=datos.correo;
    var pass=datos.clave;

    var validar = function(datos){
        for(var i in datos){
            if(datos[i]=="") return "Por favor llena los campos completos";
        }
        return true;
    };

    //Verificar conexion
    if(!fnVerficarConexion()){
        var valido = validar(datos);
        if(true!==valido){
            fnMostrarMensaje('Aviso',valido);
            return;
        }
        $.ajax({
            data:datos,
            url:"http://www.mepremio.com/app/registro",
            async:false,
            success: function(datos){
                try{
                    var jsonTemp=JSON.stringify(datos);
                    jsonTemp=$.parseJSON(jsonTemp);
                    if("error" in jsonTemp){
                        fnMostrarMensaje('Error',jsonTemp.error);
                        return;
                    }
                    else{
                        fnMostrarMensaje('Mensaje','Bienvenido a mePremio.com');
                        fnObtenerJSON(correo,pass);
                        if(MePremioData.perfil.id != ""){
                            App.load('pgPrincipal');
                            fnBorrarHistorialNavegacion();
                        }
                    }
                } catch (e){
                    fnMostrarMensaje('Error','Ocurrió un problema al hacer el registro, vuelve a intentarlo. Si el problema continúa contáctanos en mePremio.com');
                }
                },
                error: function(){
                    fnMostrarMensaje('Error','Ocurrió un problema al hacer el registro, revisa tu conexión a internet.');
            }
        });
    }
    else{
        fnMostrarMensaje('Aviso','Verifique su conexión a internet.');
    }
};
/*********************** Procesos de Mensajes ***************************/
function fnMensajes(){
    if(MePremioData.perfil.id != ""){
        if(MePremioData.mensajes.length == 0){
            $("#msjMensajes").html("<p>No tienes mensajes.</p><p>Sigue participando para recibir promociones de tus negocios favoritos.</p>");
        }
        else{
            var mensajes = "";
            var mensajesLeidos = localStorage.getItem(idMensajes).split('|');
            var llave = "";
            for(var i=0; i<MePremioData.mensajes.length; i++){
                var icono = fnObtenerIcono(MePremioData.descargas,MePremioData.mensajes[i].negocio);
                var sobre = "img/sobre.png";
                for(var x = 0; x < mensajesLeidos.length; x++){
                    if(mensajesLeidos[x] == MePremioData.mensajes[i].llave){
                        sobre = "";
                        llave = MePremioData.mensajes[i].llave;
                    }
                }
                mensajes += '<div class="puntos" style="cursor: pointer;" onclick="fnAbrirMensaje('+i+');"><div class="base"><table style="width: 100%;"><tr><td style="width: 10%;"><div class="porcentaje"><img src="'+icono+'" style="width: 100%;margin-bottom: 11px;"></div></td><td style="width: 80%;"><div class="baseDatos"><div style="margin-left: 5%;" class="descripcionBase">'+MePremioData.mensajes[i].asunto+'</div></div></td><td style="width: 10%;"><div class="tituloBase" style="float: right;margin-top: -30px;"><img id="sobreMensaje'+i+'" src="'+sobre+'"></div></td></tr></table><div class="clearL"></div></div></div>';
            }
            $("#listaMensajes").html(mensajes);
        }
    }
    else{
        $("#msjMensajes").html("<p>No hay datos.</p><p>Conéctate para descargarlos.</p>");
    }
}
function fnObtenerIcono(iconos,idNegocio){
    var imagen="";
    for(var x=0; x<iconos.length; x++){
        var verdad=iconos[x].nombre.indexOf("icono"+idNegocio);
        if(0==verdad){
            imagen=iconos[x].url;
        }
    }
    return imagen;
}
function fnAbrirMensaje(posisicion){
    var index = { indice : posisicion };
    App.load('pgMensaje',index);
}
/*********************** Procesos de Puntos ***************************/
function formatoCaducidad(str){
    var M = ["","Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];
    var y = str.substring(0,4);
    var m = M[str.substring(4)*1];
    return m + " "+ y;
}
function fnObtenerImagen(logos,idNegocio){
    var imagen="";
    for(var x=0; x<logos.length; x++){
        var verdad=logos[x].nombre.indexOf("logo"+idNegocio);
        if(0==verdad){
            imagen=logos[x].url;
        }
    }
    return imagen;
}
/*********************** Procesos de Negocios ***************************/
function fnAbrirNegocio(infoNegocio){
    var index = { indice : infoNegocio };
    App.load('pgNegociosInfo', index);
}
function fnListaSucursales(sucursal){
    var lista = "";
    for(var i = 0; i < sucursal.sucursales.length; i++){
        lista+= '<p class="nombreSucursal">'+sucursal.sucursales[i].nombre+'</p><p class="descripcionSucursal">'+sucursal.sucursales[i].direccion+', ' +sucursal.sucursales[i].colonia+', '+sucursal.sucursales[i].municipio_nombre+', '+sucursal.sucursales[i].estado_nombre+'</p>';
        if(!((i + 1) == sucursal.sucursales.length)){
            lista+='<hr>';
        }
    }
    return lista;
}
function fnBasesSucursal(bases){
    $("#porcentajeBase1").html(bases.puntos_ticket+'');
    $("#titulBase1").html('Puntos por visita');
    $("#descripBase1").html('Al escanear un QR recibes puntos que equivalen a el '+ bases.puntos_ticket +' pts por visita.');

    $("#porcentajeBase2").html(bases.puntos_actividad +'');
    $("#titulBase2").html('Puntos por participación');
    $("#descripBase2").html('Al escanear un QR puedes participar en una actividad por un '+ bases.puntos_actividad +' adicional.');

    $("#porcentajeBase5").html(bases.max_uso + '%');
    $("#titulBase5").html('Uso de puntos');
    $("#descripBase5").html('En tus siguientes compras puedes utilizar puntos hasta por un '+ bases.max_uso +'% del valor de la compra.');

    $("#porcentajeBase6").html(bases.caducidad);
    $("#titulBase6").html('Caducidad');
    $("#descripBase6").html('Tienes hasta '+ bases.caducidad +' meses para utilizar tus puntos a partir del último QR escaneado.');
}

/*********************** Procesos de Escanear ***************************/
function fnCodificar(str){
    var codificacion = { 't':'t','b':'0','d':'1','o':'2','i':'3','c':'4','a':'5','r':'6','p':'7','e':'8','m':'9','z':'.','w':',','q':'|','x':'-'};
    var r = "";
    for(var i=0;i<str.length;i++){
        for(var s in codificacion){
            if(str[i]==codificacion[s]){
                r+=s;
            }
        }
    }
    return r;
}
function esQRMePremio(str){
    var str = (str||"").toLowerCase();
    return str.substr(0,35)=="http://mepremio.com/site/descargar/" || str.substr(0,39)=="http://www.mepremio.com/site/descargar/";
}

var dataActvidadFB = "";
//Loguerse desde Facebook
var fnLoginFB = function () {
    if (!window.cordova) {
        var appId = prompt("171849256285091", "");
        facebookConnectPlugin.browserInit(appId);
    }
    
    facebookConnectPlugin.login(
        ["email"],
        function (response) {
        },
        function (response) {
            App.load('pgPrincipal');
            fnBorrarHistorialNavegacion();
            fnMostrarMensaje('Aviso',"No se pudo conectar a Facebook.\nIntente nuevamente a escanear QR mePremio.");
        }
    );
}

var fnFbShare = function () {
    facebookConnectPlugin.showDialog( {
        method: "feed",
        link: likeUrl
    },
    function (response) {
        likeRespuesta = true;
        if(response.post_id){
            fnEnviarFB();
        }
    },
    function (response) {
        //fnMostrarMensaje('Mensaje','Intente nuevamente.')
    });
}

var getStatus = function () { 
    facebookConnectPlugin.getLoginStatus( 
        function (response) { },
        function (response) { });
}

function fnEnviarFB(){
    $.ajax({
        data:{
            data : dataActvidadFB.data,
            terminar : 1,
            liked : likeRespuesta ? "1" : "0"
        },
        type : 'POST',
        url : "http://mepremio.com/app/visita",
        async : false,
        success : function(data){
        try {
            var data = JSON.stringify(data);
            data = $.parseJSON(data);
        } catch (e){
            var data = {};
            data.error("Ocurrió un error al enviar. Inténtalo más tarde");
        }
        if(data.error){
            fnMostrarMensaje('Error',data.error);
        } 
        else {
            likeRespuesta = false;
            fnMostrarMensaje("¡Felicidades!","Ganaste " + data.puntos_totales + " punto" + ls(data.puntos_totales) + ".");

            App.load('pgPrincipal');

            fnBorrarHistorialNavegacion();
        }
    },
        error: function(err){
            fnMostrarMensaje('Error','No se pudo establecer la conexión. Inténtalo más tarde.');
        }
    });
}

var ls = function(num){
    return num==1 ? "" : "s";
};

function ActividadPreguntaEstudio(data){
    App.load('pgEscanerPreguntas', data);
}
function ActividadPreguntaJuego(data){
    App.load('pgEscanerPreguntas', data);
}
function ActividadFB(data){
    App.load('pgEscanerLike', data);
}
function sinActividad(data){
    fnMostrarMensaje('¡Felicidades!','¡Ya ganaste ' + data.puntos_totales + ' puntos!');
    App.load('pgPrincipal');
    fnBorrarHistorialNavegacion();
}
function fnEnviarRespuestas(){
    
    var preguntas = $('input:radio[name=preguntas]:checked').val();
    if(preguntas){
        $.ajax({
                data : {
                    data : datoCodificado,
                    terminar : 1,
                    respuesta : preguntas
                },
                url : "http://mepremio.com/app/visita",
                async : false,
                success : function(datos){
                    try{
                        var dato = JSON.stringify(datos);
                        dato = $.parseJSON(dato);
                    } catch (e){
                        var dato = {}
                        dato.error = "Ocurrió un error al enviar. Inténtalo más tarde";
                    }
                    if(dato.error){
                        fnMostrarMensaje('Aviso',dato.error)
                    } 
                    else{
                        fnMostrarMensaje('¡Felicidades!',"Ganaste "+ dato.puntos_totales + " punto"+ ls(dato.puntos_totales) +".");
                    }
                },
                error: function(){
                    fnMostrarMensaje('Error','No se pudo establecer la conexión. Inténtalo más tarde');
                }
            });
        App.load('pgPrincipal');
        fnBorrarHistorialNavegacion();
    }
    else{
        fnMostrarMensaje('Mensaje','Seleccione una respuesta...');
    }
}

/*********************** Procesos de Escaner ***************************/
function fnEscanerQR(){
    if(MePremioData.perfil.id != ""){
        //Agregar proceo de QR (Validar)***
        cordova.plugins.barcodeScanner.scan(
            function (result) {
                var QR = result.text;
                if(esQRMePremio(QR)){
                    //Verificar conexion
                    if(!fnVerficarConexion()){
                        navigator.geolocation.getCurrentPosition(
                            function(position) {
                                var lat = position.coords.latitude;
                                var long = position.coords.longitude;
                                var string = [QR.split("/").pop(),MePremioData.perfil.id,lat,long].join("|");
                                datoCodificado = fnCodificar(string);
                                
                                $.ajax({
                                    data:{
                                        data : datoCodificado
                                    },
                                    url:"http://mepremio.com/app/visita",
                                    async:false,
                                    success: function(datos){
                                        try{
                                            var data = JSON.stringify(datos);
                                            data = $.parseJSON(data);
                                        } catch (e){
                                            var data={};
                                            data.error="El QR no se procesó correctamente, inténtalo más tarde";
                                        }

                                        if(data.error){
                                            fnMostrarMensaje('Aviso',data.error);
                                            return;
                                        }
                                        if(!data.usuario){
                                            fnMostrarMensaje('Error','El QR no se procesó correctamente, inténtalo más tarde');
                                            return;
                                        }
                                        switch(data.actividad){
                                            case "j":
                                                ActividadPreguntaJuego(data);
                                                break;
                                            case "e":
                                                ActividadPreguntaEstudio(data);
                                                break;
                                            case "l":
                                                dataActvidadFB = data;
                                                ActividadFB(data);
                                                break;
                                            default:
                                                sinActividad(data);
                                        }
                                    },
                                    error: function(){
                                        fnMostrarMensaje('Error','No se pudo establecer la conexión. Inténtalo más tarde');
                                    }
                                });

                            },
                            function(error){
                                fnMostrarMensaje('Aviso',"Activar la ubicación de redes móviles y GPS ó Vuelva a escanear el QR.");
                            }, {
                                enableHighAccuracy: true,
                                maximumAge : 10000,
                                timeout : 8700
                            }
                        );
                    }
                    else{
                        fnMostrarMensaje('Aviso','Verifique su conexión a internet.');
                    }
                }
            }, 
            function (error) { // si la función falla o se encuentra un error entra aquí
                fnMostrarMensaje('Error','Error al escanear el QR mePremio.');
                data="";
            }
        );
    }
    else{
        fnMostrarMensaje('Aviso','Da click en "Crear cuenta" o "Login" en el menú superior para utilizar el Escaner');
    }
}