<?php
session_start();
require_once '../classes/Archivos.php';
require_once '../classes/SGI.php';
require_once '../include/bd_pdo.php';

if(!isset($_POST['tipo'])){
    $return['error'] = 'Error! No se recibieron los datos.';
} else {
    switch ($_POST['tipo']) {
        case 1: //Datos Principales
            switch ($_POST['accion']) {
                case 1: //Select
                    $users = SGI::clavesAlumno($pdo, $_SESSION['usuario_id']);
                    if(count($users) == 0)
                        $return['error'] = 'No se obtuvo acceso a los datos del usuario';
                    else {
                        $return['nombre'] = $users[0]['Usuario_nombre'];
                        $return['apellidos'] = $users[0]['Usuario_apellidos'];
                        $return['curp'] = $users[0]['Usuario_curp'];
                        switch($users[0]['EstadoAlumno_id']){
                            case 1: $return['estatus'] = 'Alumno'; break;
                            case 2: $return['estatus'] = 'Exalumno'; break;
                            case 4: $return['estatus'] = 'Egresado'; break;
                        }
                        $carreras = '';
                        foreach ($users as $user){
                            $carreras .= '<div class="d-flex justify-content-start align-items-start align-items-sm-center"><div class="num">' . $user['Usuario_claveULSA'] . '</div><div>' . $user['Carrera_desc'] . '</div></div>';
                        }
                        $return['carreras'] = $carreras;
                        $validando = SGI::validacionDatosAlumno($pdo, $_SESSION['usuario_id']);
                        $return['validacion'] = $validando;
                        if ($validando){
                            $datos = SGI::checkDatosAlumno($pdo, $_SESSION['usuario_id']);
                            if(count($datos) == 0)
                                $return['msg'] = '';
                            else {
                                $return['msg'] = '<div class="d-flex flex-column">
                                    <div>La actualización se encuentra en proceso de autorización con los siguientes datos:</div>
                                    <div class="indivisa-text-bold-italic">' . $datos['Usuario_nombre_new'] . ' ' . $datos['Usuario_apellidos_new'] . '</div>
                                    <div><span>CURP: </span><span class="indivisa-text-bold-italic">' . $datos['Usuario_curp_new'] . '</span></div>
                                </div>';                                
                            }
                        }
                    }
                    break;
                case 2: //Update
                    if(!SGI::actualizaDatosAlumno($pdo, filter_var($_POST['nombre'], FILTER_SANITIZE_STRING), filter_var($_POST['apellidos'], FILTER_SANITIZE_STRING), filter_var($_POST['curp'], FILTER_SANITIZE_STRING), $_SESSION['usuario_id']))
                        $return['error'] = 'No fue posible modificar tu información';
                    else
                        $return['ok'] = 'Tus datos han sido envíados a <span class="text-azul1">validación</span><br />Aparecerá un signo <i class="ing-importante2 text-azul1"></i>, el cual desaparecerá una vez validada la información';
                    break;
            }
            break;
        case 2: //Semblanza
            switch ($_POST['accion']) {
                case 1: //Select
                    $return['acerca'] = SGI::semblanzaAlumno($pdo, $_SESSION['usuario_id']);
                    break;
                case 2: //Update
                    if(SGI::actualizaSemblanzaAlumno($pdo, filter_var($_POST['acerca'], FILTER_SANITIZE_STRING), $_SESSION['usuario_id']))
                        $return['error'] = 'No fue posible actualizar tu semblanza';
                    else
                        $return['ok'] = 'Se actualizó correctamente tu semblanza';
                    break;
            }
            break;
        case 3: //Redes
            switch ($_POST['accion']) {
                case 1: //Select
                    $contactos = SGI::contactosAlumno($pdo, $_SESSION['usuario_id']);
                    $emergencia = SGI::emergenciaAlumno($pdo, $_SESSION['usuario_id']);
                    if(count($contactos) == 0 && count($emergencia) == 0){
                        $return['html'] = '';
                    } else {
                        $redes = getRedes($pdo);
                        $html = '';
                        foreach ($redes as $red){
                            $datos = '';
                            if ($red['TipoContacto_id'] == 0){
                                if (count($emergencia) > 0){
                                    foreach ($emergencia as $emer){
                                        $datos .= '<li><div><label>' . $emer['ContactoEmergencia_tel'] . '</label><span>' . $emer['ContactoEmergencia_nombre'] . '</span></div></li>';
                                    }
                                    $html .= '<button type="button" class="iconRedes" data-toggle="popover" data-trigger="focus" data-html="true" title="' . $red['TipoContacto_desc'] . '" data-placement="auto" 
                                            data-content="<ul>' . $datos . '</ul>"><i class="' . $red['TipoContacto_icono'] . '"></i></button>';
                                }
                            } else {
                                if (!is_bool(array_search($red['TipoContacto_id'], array_column($contactos, 'TipoContacto_id')))) {
                                    $keys = array_keys(array_column($contactos, 'TipoContacto_id'), $red['TipoContacto_id']);
                                    $datos = '';
                                    foreach ($keys as $key){
                                        if ($red['TipoContacto_id'] == 2) { //Sólo Código Postal
                                            $datos .= '<li><div><label>' . $contactos[$key]['Contacto_valor'] . ', ' . $contactos[$key]['SubtipoContacto_desc'] . '</label></div></li>';
                                        } else {
                                            $datos .= '<li><div><label>' . $contactos[$key]['Contacto_valor'] . '</label><span>';
                                            if (!is_null($contactos[$key]['SubtipoContacto_desc']))
                                                $datos .= $contactos[$key]['SubtipoContacto_desc'] . ' - ';
                                            $datos .= $contactos[$key]['PerfilContacto_desc'] . '</span></div></li>';
                                        }
                                    }
                                    $html .= '<button type="button" class="iconRedes" data-toggle="popover" data-trigger="focus" data-html="true" title="' . $red['TipoContacto_desc'] . '" data-placement="auto" 
                                        data-content="<ul>' . $datos . '</ul>"><i class="' . $red['TipoContacto_icono'] . '"></i></button>';
                                }
                            }
                        }
                        $return['html'] = $html;
                    }
                    break;
                case 2: //Add
                    $agregado = false;
                    $msg = '';
                    if ($_POST['red'] != 0)
                        $agregado = SGI::agregaContacto($pdo, $_POST['red'], $_POST['dato'], $_POST['uso'], $_SESSION['usuario_id'], $_POST['subtipostatus'], $_POST['subtipo']);
                    else {
                        $existe = SGI::emergenciaAlumno($pdo, $_SESSION['usuario_id']);
                        if (count($existe) == 0)
                            $agregado = SGI::agregaContactoEmergencia($pdo, $_POST['dato'], filter_var($_POST['nombre'], FILTER_SANITIZE_STRING), $_SESSION['usuario_id']);
                        else
                            $msg = 'Únicamente puedes agregar un contacto de emergencia';
                    }
                    if(!$agregado){
                        if (!empty ($msg))
                            $return['error'] = $msg;
                        else
                            $return['error'] = 'No fue posible agregar <span class="text-azul1">' . $_POST['dato'] . '</span>';
                    } else
                        $return['ok'] = 'Se agregó correctamente <span class="text-azul1">' . $_POST['dato'] . '</span>';
                    break;
                case 3: //Sup
                    $error = 0;
                    foreach ($_POST['ids_redes'] as $red){
                        $red = filter_var($red, FILTER_SANITIZE_NUMBER_INT);
                        if (intval($red) == 0){
                            if(!SGI::eliminaContactoEmergencia($pdo, $_SESSION['usuario_id']))
                                $error++;
                        } else {
                            if(!SGI::eliminaContacto($pdo, $_SESSION['usuario_id'], $red))
                                $error++;
                        }
                    }
                    $total = count($_POST['ids_redes']);
                    if ($error == 0) {
                        if ($total == 1)
                            $return['ok'] = 'Se eliminó de manera exitosa el dato o red';
                        else
                            $return['ok'] = 'Se eliminaron de manera exitosa los ' . $total . ' datos y/o redes';
                    } else {
                        if ($error == $total){
                            if ($error == 1)
                                $return['error'] = 'No fue posible eliminar el dato o red';
                            else
                                $return['error'] = 'No fue posible eliminar ningún dato o red';
                        } else {
                            if ($error == 1)
                                $return['error'] = 'No fue posible eliminar un dato o red';
                            else
                                $return['error'] = 'No fue posible elimnar ' . $error . ' datos y/o redes';
                        }
                    }
                    break;
                case 4: //SubtiposContacto
                    $_POST['tipo_contacto'] = filter_var($_POST['tipo_contacto'], FILTER_SANITIZE_NUMBER_INT);
                    $subtipos = SGI::getSubTipoContacto($pdo, $_POST['tipo_contacto']);
                    if(count($subtipos) == 0)
                        $return['error'] = 'No fue posible obtener los subtipos de contacto';
                    else {
                        $html = '';
                        foreach($subtipos as $subtipo){
                            $html .= '<li data-id="' . $subtipo['SubtipoContacto_id'] . '">' . $subtipo['SubtipoContacto_desc'] . '</li>';
                        }
                        $return['lista'] = $html;
                        switch ($_POST['tipo_contacto']){
                            case 1: $return['titulo'] = 'Tipo de teléfono'; $return['msg'] = 'Elige el tipo de teléfono'; break;
                            case 2: $return['titulo'] = 'País'; $return['msg'] = 'Elige el país del código postal'; break;
                            default : $return['titulo'] = ''; $return['msg'] = ''; break;
                        }
                    }
                    break;
                case 5: //Lista para eliminar
                    $contactos = SGI::contactosAlumno($pdo, $_SESSION['usuario_id']);
                    $emergencia = SGI::emergenciaAlumno($pdo, $_SESSION['usuario_id']);
                    if(count($contactos) == 0 && count($emergencia) == 0){
                        $return['error'] = '<div class="text-white indivisa-text-bold">No fue posible obtener los datos de contacto</div>';
                    } else {
                        $redes = getRedes($pdo);
                        $html = '';
                        foreach ($redes as $red){
                            if ($red['TipoContacto_id'] == 0){
                                $datos = '';                                
                                foreach ($emergencia as $emer){
                                    $datos .= '<li data-id="0" data-tel="' . $emer['ContactoEmergencia_tel'] . '" data-desc="' . $emer['ContactoEmergencia_nombre'] . '" class="d-flex flex-row justify-content-start align-items-start red"></span><span class="ing-cancelar"></span><div class="flex-grow-1">' . $emer['ContactoEmergencia_tel'] . '</label><span> (' . $emer['ContactoEmergencia_nombre'] . ')</div><span class="ing-basura"></span></li>';
                                }
                                if (!empty($datos)){
                                    $html .= '<div class="titRed d-flex flex-row justify-content-start align-items-center mb-2"><span class="iconRed ' . $red['TipoContacto_icono'] . '"></span><label>' . $red['TipoContacto_desc'] . '</label></div><ul>' . $datos . '</ul>';
                                }
                            } else {
                                if (!is_bool(array_search($red['TipoContacto_id'], array_column($contactos, 'TipoContacto_id')))) {
                                    $keys = array_keys(array_column($contactos, 'TipoContacto_id'), $red['TipoContacto_id']);
                                    $datos = '';                                
                                    foreach ($keys as $key){
                                        if ($red['TipoContacto_id'] == 2) { //Sólo Código Postal
                                            $datos .= '<li data-id="' . $contactos[$key]['Contacto_id'] . '" class="d-flex flex-row justify-content-start align-items-start red"></span><span class="ing-cancelar"></span><div class="flex-grow-1">' . $contactos[$key]['Contacto_valor'] . ', ' . $contactos[$key]['SubtipoContacto_desc'] . '</div><span class="ing-basura"></span></li>';
                                        } else {
                                            $datos .= '<li data-id="' . $contactos[$key]['Contacto_id'] . '" class="d-flex flex-row justify-content-start align-items-start red"></span><span class="ing-cancelar"></span><div class="flex-grow-1">' . $contactos[$key]['Contacto_valor'] . '</label><span> (';
                                            if (!is_null($contactos[$key]['SubtipoContacto_desc']))
                                                $datos .= $contactos[$key]['SubtipoContacto_desc'] . ' - ';
                                            $datos .= $contactos[$key]['PerfilContacto_desc'] . ')</div><span class="ing-basura"></span></li>';
                                        }
                                    }
                                    if (!empty($datos)){
                                        $html .= '<div class="titRed d-flex flex-row justify-content-start align-items-center mb-2"><span class="iconRed ' . $red['TipoContacto_icono'] . '"></span><label>' . $red['TipoContacto_desc'] . '</label></div><ul>' . $datos . '</ul>';
                                    }                                
                                }
                            }
                        }
                        if (!empty($html))
                            $html = '<div class="d-flex flex-column redes">' . $html . '</div>';
                        $return['html'] = $html;
                    }
                    break;
            }
            break;            
        case 4: //Intereses
            switch ($_POST['accion']) {
                case 1: //Select
                    $stmt = $pdo->prepare('SELECT * FROM alu_fs_interes(:Usuario_id) ORDER BY "Interes_nombre"');
                    $stmt->bindParam(':Usuario_id', $_SESSION['usuario_id']);
                    if(!$stmt->execute()){
                        print_r($stmt->errorInfo());
                        $return['error'] = 'No fue posible obtener la descripción del usuario';
                    } else {
                        $intereses = $stmt->fetchAll();
                        $profesionales = '';
                        $personales = '';
                        foreach ($intereses as $interes){
                            if($interes['Interes_tipo'])
                                $profesionales .= '<li data-id="' . $interes['Interes_id'] . '" class="d-flex flex-row justify-content-start align-items-start interes col-sm-6"><span class="ing-cuadrado text-azul2"></span><span class="ing-cancelar"></span><div class="flex-grow-1">' . $interes['Interes_nombre'] . '</div><span class="ing-basura"></span></li>';
                            else
                                $personales .= '<li data-id="' . $interes['Interes_id'] . '" class="d-flex flex-row justify-content-start align-items-start interes col-sm-6"><span class="ing-cuadrado text-azul2"></span><span class="ing-cancelar"></span><div class="flex-grow-1">' . $interes['Interes_nombre'] . '</div><span class="ing-basura"></span></li>';
                        }
                        $return['profesionales'] = $profesionales;
                        $return['personales'] = $personales;
                    }
                    $stmt->closeCursor();
                    $stmt = null;
                    break;
                case 2: //Add
                    $_POST['interes'] = filter_var($_POST['interes'], FILTER_SANITIZE_STRING);
                    $_POST['tipo_interes'] = filter_var($_POST['tipo_interes'], FILTER_SANITIZE_NUMBER_INT);
                    $stmt = $pdo->prepare('SELECT * FROM alu_fi_interes(:Interes_tipo,:Interes,:Usuario_id)');
                    $stmt->bindParam(':Interes', $_POST['interes']);
                    $stmt->bindParam(':Interes_tipo', $_POST['tipo_interes']);
                    $stmt->bindParam(':Usuario_id', $_SESSION['usuario_id']);
                    if(!$stmt->execute()){
                        print_r($stmt->errorInfo());
                        $return['error'] = 'No fue posible agregar el interés <span class="text-azul1">' . $_POST['interes'] . '</span>';
                    }
                    else
                        $return['ok'] = 'Se agregó correctamente el interés <span class="text-azul1">' . $_POST['interes'] . '</span>';
                    $stmt->closeCursor();
                    $stmt = null;
                    break;
                case 3: //Sup
                    $error = 0;
                    foreach ($_POST['ids_intereses'] as $interes){
                        $interes = filter_var($interes, FILTER_SANITIZE_NUMBER_INT);
                        $stmt = $pdo->prepare('SELECT * FROM alu_fd_interes(:Interes_id, :Usuario_id)');
                        $stmt->bindParam(':Interes_id', $interes);
                        $stmt->bindParam(':Usuario_id', $_SESSION['usuario_id']);
                        if(!$stmt->execute()){
                            print_r($stmt->errorInfo());
                            $error++;
                        }
                        $stmt->closeCursor();
                        $stmt = null;
                    }
                    $total = count($_POST['ids_intereses']);
                    if ($error == 0) {
                        if ($total == 1)
                            $return['ok'] = 'Se eliminó de manera exitosa el interes';
                        else
                            $return['ok'] = 'Se eliminaron de manera exitosa los ' . $total . ' intereses';
                    } else {
                        if ($error == $total){
                            if ($error == 1)
                                $return['error'] = 'No fue posible eliminar el interés';
                            else
                                $return['error'] = 'No fue posible eliminar ningún interés';
                        } else {
                            if ($error == 1)
                                $return['error'] = 'No fue posible eliminar un interés';
                            else
                                $return['error'] = 'No fue posible elimnar ' . $error . ' intereses';
                        }
                    }
                    break;
            }
            break;
        case 5: //Foto
            switch ($_POST['accion']) {
                case 1: //Select
                    $foto = SGI::fotoAlumno($pdo, $_SESSION['usuario_id']);
                    $es_admin = SGI::esAdministrativo($pdo, $_SESSION['usuario_id']);
                    if (count($es_admin) == 0 || (isset($es_admin['estatus']) && $es_admin['estatus'] == 'BAJA')){
                        if (str_contains($foto, 'nico'))
                            $return['foto'] = 'img/' . $foto;
                        else
                            $return['foto'] = 'archivos/alumnos/' . $idalumno . '/' . $foto;
                    } else {
                        if (str_contains($foto, 'nico'))
                            $return['foto'] = 'img/' . $foto;
                        else
                            $return['foto'] = 'http://atenea.lci.ulsa.mx/img/fotos/'. $foto;
                    }
                    break;
                case 2: //Actualiza Foto
                    $es_admin = SGI::esAdministrativo($pdo, $_SESSION['usuario_id']);
                    if (count($es_admin) == 0 || (isset($es_admin['estatus']) && $es_admin['estatus'] == 'BAJA')){
                        $anterior = SGI::fotoAlumno($pdo, $_SESSION['usuario_id']);
                        $cargada = true;
                        $nombre = '';
                        if(!boolval($_POST['limpia'])) {
                            $extension = substr($_FILES['archivo']['name'][0], strrpos($_FILES['archivo']['name'][0], '.'));
                            $nombre = 'foto_' . $_SESSION['usuario_id'] . '_' . uniqid() . $extension;
                            if (!Archivos::existeCapeta('archivos/alumnos/' . $_SESSION['usuario_id']))
                                Archivos::creaCarpeta('archivos/alumnos/' . $_SESSION['usuario_id']);
                            if (!Archivos::agregaArchivo($_FILES['archivo']['tmp_name'][0], 'archivos/alumnos/' . $_SESSION['usuario_id'], $nombre))
                                $cargada = false;
                        }
                        if($cargada) {
                            if ($anterior != SGI::$foto_pefil)
                                Archivos::eliminaArchivo('', $anterior);
                            if(boolval($_POST['limpia']))
                                $cargada = SGI::actualizaFotoAlumno($pdo, $_SESSION['usuario_id']);
                            else
                                $cargada = SGI::actualizaFotoAlumno($pdo, $_SESSION['usuario_id'], $nombre);
                            if (!$cargada)
                                $return['error'] = 'No fue posible actualizar la foto';
                            else
                                $return['ok'] = 'Se cambió correctamente la foto';
                        } else 
                        $return['error'] = 'No fue posible subir la foto';
                    } else
                        $return['error'] = 'Al ser colaborador de la facultad, tu foto deberás cambiarla en APSA';
                    break;
            }
            break;
    }
}
$return['json'] = json_encode($return);
echo json_encode($return);

function getRedes($pdo){
    $redes = SGI::getRedes($pdo);
    if (count($redes) > 0){
        array_push($redes, array('TipoContacto_id' => 0, 'TipoContacto_desc' => 'Contacto de Emergencia', 'TipoContacto_icono' => 'fa-solid fa-book-medical', 'SubtipoContacto' => false));
        $temp = array();
        $key = array_search(2, array_column($redes, 'TipoContacto_id'));
        $temp = $redes[$key];
        unset($redes[$key]);
        array_unshift($redes, $temp);
        $key = array_search(3, array_column($redes, 'TipoContacto_id'));
        $temp = $redes[$key];
        unset($redes[$key]);
        array_unshift($redes, $temp);
        $key = array_search(1, array_column($redes, 'TipoContacto_id'));
        $temp = $redes[$key];
        unset($redes[$key]);
        array_unshift($redes, $temp);
        $key = array_search(0, array_column($redes, 'TipoContacto_id'));
        $temp = $redes[$key];
        unset($redes[$key]);
        array_unshift($redes, $temp);
    }
    return $redes;
}