<?php
class API_Gusber{

    public $IDr = 0 ;
    //Función que crea y devuelve un objeto de conexión a la base de datos y chequea el estado de la misma.
    function conectarBD(){
            $server = "localhost:3306";
            $usuario = "qpsec_usrSEALCHECK";
            $pass = "mabeluis2602";
            $BD = "qpsec_SEALCHECK";
            //variable que guarda la conexión de la base de datos
            $conexion = mysqli_connect($server, $usuario, $pass, $BD);
            //$conexion = new PDO("mysql:host=localhost:3306;dbname=qpsec_SEALCHECK","qpsec_usrSEALCHECK", "mabeluis2602");
            
            //Comprobamos si la conexión ha tenido exito
            if(!$conexion){
               echo 'Ha sucedido un error inexperado en la conexion de la base de datos<br>';
            }
            //devolvemos el objeto de conexión para usarlo en las consultas
            return $conexion;
    }
    /*Desconectar la conexion a la base de datos*/
    function desconectarBD($conexion){
            //Cierra la conexión y guarda el estado de la operación en una variable
            $close = mysqli_close($conexion);
            //Comprobamos si se ha cerrado la conexión correctamente
            if(!$close){
               echo 'Ha sucedido un error inesperado en la desconexion de la base de datos<br>';
            }
            //devuelve el estado del cierre de conexión
            return $close;
    }

    //Devuelve un array multidimensional con el resultado de la consulta
    function getArraySQL($sql){
        //Creamos la conexión
        $conexion = $this->conectarBD();
        //generamos la consulta
        if(!$result = mysqli_query($conexion, $sql)) die();

        $rawdata = array();
        //guardamos en un array multidimensional todos los datos de la consulta
        $i=0;
        while($row = mysqli_fetch_array($result))
        {
            //guardamos en rawdata todos los vectores/filas que nos devuelve la consulta
            $rawdata[$i] = $row;
            $i++;
        }
        //Cerramos la base de datos
        $this->desconectarBD($conexion);
        //devolvemos rawdata
        return $rawdata;
    }
    
    //inserta en la base de datos un nuevo registro en la tabla usuarios
    function insertRandom(){
    	//Generamos un número entero aleatorio entre 0 y 100
    	$ran = rand(0, 100);
        //creamos la conexión
        $conexion = $this->conectarBD();
        //Escribimos la sentencia sql necesaria respetando los tipos de datos
        $sql = "insert into random (valor)
        values (".$ran.")";
        //hacemos la consulta y la comprobamos
        $consulta = mysqli_query($conexion,$sql);
        if(!$consulta){
            echo "No se ha podido insertar en la base de datos<br><br>".mysqli_error($conexion);
        }
        //Desconectamos la base de datos
        $this->desconectarBD($conexion);
        //devolvemos el resultado de la consulta (true o false)
        return $consulta;
    }
    function getAllInfo($sql){
        return $this->getArraySQL($sql);
    }
    function getSqlInfo($sql){
        //Creamos la conexión
        $conexion = $this->conectarBD();
        
        //generamos la consulta
        if(!$result = mysqli_query($conexion, $sql)) die();

        //Cerramos la base de datos
        $this->desconectarBD($conexion);
        //devolvemos rawdata
        return $result;
    }
    
    ///////////////////////////////////////////
    // Funciones para actividades de LOGIN //
    ///////////////////////////////////////////
    function getFormatoJsonUser($result){
        $idsupervisor = 0;
        $datos = array();
        foreach($result as $row){
            if ($row['idSupervisor'] > 0)
                $idsupervisor = $row['idSupervisor'];
                
            array_push($datos, array(
                'id'=>$row['id'],
                'idsupervisor'=>$idsupervisor, 
                'name'=>utf8_encode($row['name']), 
                'email'=>$row['email'], 
                'otd'=>$row['otd'], 
                'idrol'=>$row['idrol'], 
                'nombrerol'=>$row['nombrerol'],
                'foto'=>$row['foto'], 
                'estado'=>$row['estado'], 
                'etapaCuenta'=>$row['etapaCuenta'],));
        }
        
        //echo utf8_encode(json_encode($datos));
        return $datos;
    }

    function getInfoUser($email, $password){
        //Creamos la conexión
        $conexion = $this->conectarBD();
        //$email = mysql_real_escape_string($email);
        //$password = mysql_real_escape_string($password);
        
        $sql = "SELECT u.id, case when idrol = 1 then u.id else idSupervisor end as idSupervisor, name, email, otd, idrol, r.nombre as nombrerol, foto, u.estado, etapaCuenta FROM users u INNER JOIN roles r ON r.id = u.idrol WHERE email='$email' AND otd='$password'";
        
        //generamos la consulta
        if(!$result = mysqli_query($conexion, $sql)) die();
        
        //Cerramos la base de datos
        $this->desconectarBD($conexion);

        //devolvemos rawdata
        return $this->getFormatoJsonUser($result);
    }
    
    function getInfoAllUsers(){
        //Creamos la conexión
        $conexion = $this->conectarBD();

        $sql = "SELECT u.id, case when idrol = 1 then u.id else idSupervisor end as idSupervisor, name, email, otd, idrol, nombre as nombrerol, foto, u.estado, etapaCuenta FROM users u INNER JOIN roles r ON r.id = u.idrol";
        
        //generamos la consulta
        if(!$result = mysqli_query($conexion, $sql)) die();

        //Cerramos la base de datos
        $this->desconectarBD($conexion);

        //devolvemos rawdata
        return $this->getFormatoJsonUser($result);
        
    }

    function setInfoUserLogin($id, $location, $fecha){
        //Creamos la conexión
        $conexion = $this->conectarBD();

        $datos = 'Acceso registrado desde la siguiente ubicaci&oacute;n:<br><a href="https://www.google.com/maps/place/'.$location.'" target="_blank">[ver mapa]</a>';
        
        //Se debe volver a activar cuando terminen las pruebas.
        $sqlInsert="INSERT INTO logs_sistema (id, fecha, user_id, operacion, permiso, datos, notificado) values (NULL, '$fecha', $id, 'ACCESO APP', 'LOGIN', '$datos', 0)";

        $conexion->prepare($sqlInsert)->execute();
    

        //guardamos la ubicacion del ultimo acceso.        
        //$mapa='href="https://www.google.com/maps/place/'.$location.'"';
        $sqlUpdate="UPDATE users SET ultLocacion = '$location' WHERE id = $id";
        $conexion->prepare($sqlUpdate)->execute();
        
        $sql = "SELECT u.id, case when idrol = 1 then u.id else idSupervisor end as idSupervisor, name, email, otd, idrol, nombre as nombrerol, foto, u.estado, etapaCuenta FROM users u INNER JOIN roles r ON r.id = u.idrol WHERE u.id = $id";

        //generamos la consulta
        if(!$result = mysqli_query($conexion, $sql)) die();
        
        //Cerramos la base de datos
        $this->desconectarBD($conexion);

        //devolvemos rawdata
        return $this->getFormatoJsonUser($result);
    }
    
    function sendInfoUserKey($mail){
        //Creamos la conexión
        $conexion = $this->conectarBD();

        $idUser = 0;
        $etapa = 1;
        
        if($mail > ''){
            //generamos la consulta
            if(!$res = mysqli_query($conexion, "SELECT id FROM `users` WHERE email='$mail'")) die();
            
            foreach ($res as $row){
                $idUser = $row['id'];
            }
        
            if($idUser != 0)
            {
                $sql= "Update users set etapaCuenta=$etapa where id=$idUser";
                $conexion->prepare($sql)->execute();  
            }
        }

        $sql = "SELECT u.id, case when idrol = 1 then u.id else idSupervisor end as idSupervisor, name, email, otd, idrol, nombre as nombrerol, foto, u.estado, etapaCuenta FROM users u INNER JOIN roles r ON r.id = u.idrol WHERE u.id = $idUser";

        //generamos la consulta
        if(!$result = mysqli_query($conexion, $sql)) die();
        
        //Cerramos la base de datos
        $this->desconectarBD($conexion);

        //devolvemos rawdata
        return $this->getFormatoJsonUser($result);
    }
}


?>