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

if(!isset($_POST['id'])){
    $return['error'] = 'Error! No se recibieron los datos.';
} else {
    define('HORA_INICIO', 6);//hora inicial de horario
    define('HORA_FINAL', 22);//hora final de horario
    define('FRACCION_HORA', 4);//fracciones en una hora

    define('DURACION_MIN', 60);//hora inicial de horario
    define('DURACION_MAX', 360);//hora final de horario
    define('DURACION_STEP', 15);//fracciones en una hora
    
    define('ALTO_RENGLON', 30);//alto del renglón
    
    $error = '';
    switch($_POST['tipo']){
        case 1: //Grupos
            $horario_rs = SGI::getHorarioGrupo($pdo, filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT));
            $horaMin = horaMin($horario_rs, 'Horario_hora');
            $horaMax = horaMax($horario_rs, 'Horario_hora_final');
            $dias_rs = SGI::getDias($pdo);
            if (empty($error)) {
                $xtpl = new XTemplate('../templates/horario_grupo.tpl.html');
                foreach($dias_rs as $dia){
                    $xtpl->assign('DIA', $dia['Dia_desc']);
                    $xtpl->assign('ID_DIA', $dia['Dia_id']);
                    $xtpl->parse('main.header');
                }

                $rs_i = 0;
                $spacerArr = array(1=>0,0,0,0,0,0);
                $pendiente = '<li class="pendiente">Pendiente</em>';
                $horas_dif = intval(date('H', strtotime($horaMax))) - intval(date('H', strtotime($horaMin)));

                $sub_prof_num = 0;
                $sub_num = 0;
                $tiene_submaterias = false;

                for($h = date('H', strtotime($horaMin)); $h <= date('H', strtotime($horaMax)); $h++){
                    $xtpl->assign('HORA', date('H', strtotime($h.':00')));
                    $xtpl->assign('FRACCIONES', FRACCION_HORA);
                    $xtpl->parse('main.hora_row.hora');
                    for($f = 0; $f < FRACCION_HORA; $f++){
                        foreach($dias_rs as $dia){
                            if($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i]['Horario_hora'])) == date('H:i', strtotime($h.':'.($f * (60/FRACCION_HORA)))) && $horario_rs[$rs_i]['Dia_id'] == $dia['Dia_id']){
                                if((isset($filter_fecha) && strtotime($filter_fecha) >= strtotime($horario_rs[$rs_i]['fecha_inicial']) && strtotime($filter_fecha) <= strtotime($horario_rs[$rs_i]['fecha_final'])  ) || !isset($filter_fecha)){
                                    $size = $horario_rs[$rs_i]['Horario_duracion']/(60/FRACCION_HORA);
                                    $spacerArr[$dia['Dia_id']] = $size -1;
                                    $xtpl->assign('ID_DIA', $dia['Dia_id']);
                                    $xtpl->assign('DURACION_SIZE', $size);
                                    $xtpl->assign('ALTO_DIV', $size * ALTO_RENGLON);
                                    $xtpl->assign('MATERIA', $horario_rs[$rs_i]['Materia_desc']);

                                    $xtpl->assign('HORA_I', substr($horario_rs[$rs_i]['Horario_hora'], 0, 5));
                                    $xtpl->assign('HORA_F', substr($horario_rs[$rs_i]['Horario_hora_final'], 0, 5));

                                    if($horario_rs[$rs_i]['Salon_desc'] != '')
                                        if($horario_rs[$rs_i]['Salon_desc_larga'] != '')
                                            $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc'].' ['.$horario_rs[$rs_i]['Salon_desc_larga'].']');
                                        else
                                            $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc']);
                                    else{
                                        if(!isset($horario_rs[$rs_i]['TipoSubmateria_id']) || $horario_rs[$rs_i]['TipoSubmateria_id'] == 0)
                                            $xtpl->assign('SALON', '<em>Pendinte</em>');
                                        else
                                            $xtpl->assign('SALON', '*');
                                    }

                                    //----- Carga profesores ----
                                    if($horario_rs[$rs_i]['TipoSubmateria_id'] == 0)
                                        $profesores_rs = SGI::getProfesorHorarioGrupo($pdo, $horario_rs[$rs_i]['HorarioGrupo_id']);
                                    else { //Con submaterias
                                        //----- Carga submaterias ----
                                        $submaterias_rs = SGI::getSubMateriaHorarioGrupo($pdo, $horario_rs[$rs_i]['HorarioGrupo_id']);
                                        $sub_prof_num = 0;
                                        $nombre_impreso = false;

                                        if(count($submaterias_rs) > 0){
                                            $tiene_submaterias = true;
                                            foreach($submaterias_rs as $submateria){
                                                $xtpl->assign('SUBMATERIA', $submateria['Submateria_desc']);
                                                $xtpl->assign('DIA', diaNombre($horario_rs[$rs_i]['Dia_id']));
                                                //---
                                                $profesores_rs = SGI::getSubMateriaHorarioGrupoProfesor($pdo, $horario_rs[$rs_i]['HorarioGrupo_id'], $submateria['Submateria_id']);

                                                $sub_prof_num += count($profesores_rs);

                                                if(isset($profesores_rs) && count($profesores_rs) > 0){
                                                    $profesores_all = '';
                                                    foreach($profesores_rs as $profesor){
                                                        $prof_nombre = '<li class="profesor">' . $profesor['Usuario_apellidos'] . ' ' . $profesor['Usuario_nombre'] . '</li>';
                                                        $profesores_all .= $prof_nombre;
                                                    }
                                                    $xtpl->assign('PROFESOR_SUB', $profesores_all);
                                                $xtpl->assign('SALON_SUB', $submateria['Salon_desc']);
                                                $xtpl->parse('main.submaterias_block.row.submateria');

                                                if(!$nombre_impreso){
                                                    $nombre_impreso = true;
                                                    $xtpl->assign('MAT_ROWSPAN', count($submaterias_rs));
                                                    $xtpl->parse('main.submaterias_block.row.materia');
                                                }

                                                $xtpl->parse('main.submaterias_block.row');
                                                }//solo si hay profesor
                                            }
                                        }
                                        unset($profesores_rs);
                                    }//fin con submaterias

                                    if(isset($profesores_rs) && count($profesores_rs) > 0){
                                        foreach($profesores_rs as $profesor){
                                            $prof_nombre = '<li class="profesor">' . $profesor['Usuario_apellidos'] . ' ' . $profesor['Usuario_nombre'] . '</li>';
                                            $xtpl->assign('PROFESOR', $prof_nombre);
                                            $xtpl->parse('main.hora_row.td.td_horario.profesor');
                                        }
                                    }else{
                                        if($horario_rs[$rs_i]['TipoSubmateria_id'] == 0){//no pinta maestros electivas o secuenciales
                                            $prof_nombre = $pendiente;
                                            $xtpl->assign('PROFESOR', $prof_nombre);
                                            $xtpl->parse('main.hora_row.td.td_horario.profesor');
                                        }
                                    }

                                    $xtpl->parse('main.hora_row.td.td_horario.hora');
                                    $xtpl->parse('main.hora_row.td.td_horario.texto');
                                    $xtpl->parse('main.hora_row.td.td_horario.spacer');
                                    $xtpl->parse('main.hora_row.td.td_horario');
                                }else
                                    $xtpl->parse('main.hora_row.td.td_vacio');
                                $rs_i++;
                            }else{
                                if(!isset($spacerArr[$dia['Dia_id']]) || $spacerArr[$dia['Dia_id']] == 0){
                                    $xtpl->assign('ID_DIA', $dia['Dia_id']);
                                    $xtpl->parse('main.hora_row.td.td_vacio');
                                }else
                                    $spacerArr[$dia['Dia_id']]--;
                            }
                            $xtpl->parse('main.hora_row.td');
                        }
                        $xtpl->parse('main.hora_row');
                    }
                }

                if($tiene_submaterias){
                    $xtpl->parse('main.submaterias_block.materia');
                    $xtpl->parse('main.submaterias_block');
                }
                $xtpl->parse('main');
                $return['html'] = $xtpl->text('main');
                $return['tabla'] = true;
            } else {
                $return['html'] = '<div class="marco">
                        <div class="msgAviso d-flex flex-row justify-content-between align-items-stretch mt-4">
                            <div class="iconAviso bg-danger d-flex justify-content-center align-items-center"><i class="display-3 ing-cancelar"></i></div>
                            <div class="txtAviso flex-grow-1 d-flex flex-column justify-content-center align-items-center">
                                <div class="display-5 indivisa-text-black mb-3">¡Error!</div>
                                <div class="text-center">' . $error . '</div>
                            </div>
                        </div>
                    </div>';
                $return['tabla'] = false;
            }
            break;
        case 2: //Docente
            date_default_timezone_set('America/Mexico_City');
            $horario_rs = SGI::getHorarioProfesor($pdo, filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT), date('Y-m-d'));
            $horaMin = horaMin($horario_rs, 'Hora_inicio');
            $horaMax = horaMax($horario_rs, 'Hora_final');
            $dias_rs = SGI::getDias($pdo);
            if (empty($error)) {
                $xtpl = new XTemplate('../templates/horario_profesor.tpl.html');
                foreach($dias_rs as $dia){
                    $xtpl->assign('DIA', $dia['Dia_desc']);
                    $xtpl->assign('ID_DIA', $dia['Dia_id']);
                    $xtpl->parse('main.header');
                }

                $rs_i = 0;
                $spacerArr = array(1=>0,0,0,0,0,0);
                $horas_dif = intval(date('H', strtotime($horaMax))) - intval(date('H', strtotime($horaMin)));


                for($h = date('H', strtotime($horaMin)); $h <= date('H', strtotime($horaMax)); $h++){
                    $xtpl->assign('HORA', date('H', strtotime($h.':00')));
                    $xtpl->assign('FRACCIONES', FRACCION_HORA);
                    $xtpl->parse('main.hora_row.hora');
                    for($f = 0; $f < FRACCION_HORA; $f++){
                        foreach($dias_rs as $dia){
                            if($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i]['Hora_inicio'])) == date('H:i', strtotime($h.':'.($f * (60/FRACCION_HORA)))) && $horario_rs[$rs_i]['Dia_id'] == $dia['Dia_id']){
                                if((isset($filter_fecha) && strtotime($filter_fecha) >= strtotime($horario_rs[$rs_i]['fecha_inicial']) && strtotime($filter_fecha) <= strtotime($horario_rs[$rs_i]['fecha_final'])  ) || !isset($filter_fecha)){
                                    $size = $horario_rs[$rs_i]['Duracion']/(60/FRACCION_HORA);
                                    $spacerArr[$dia['Dia_id']] = $size -1;
                                    $xtpl->assign('ID_DIA', $dia['Dia_id']);
                                    $xtpl->assign('DURACION_SIZE', $size);
                                    $xtpl->assign('ALTO_DIV', $size * ALTO_RENGLON);                                    

                                    if ($horario_rs[$rs_i]['TipoHorario_desc'] == 'Docencia'){
                                        $xtpl->assign('HORA_I', substr($horario_rs[$rs_i]['Hora_inicio'], 0, 5));
                                        $xtpl->assign('HORA_F', substr($horario_rs[$rs_i]['Hora_final'], 0, 5));

                                        $xtpl->assign('MATERIA', $horario_rs[$rs_i]['Materia_desc']);
                                        $xtpl->assign('GRUPO', $horario_rs[$rs_i]['Grupo_desc'].' '.$horario_rs[$rs_i]['Carrera_prefijo']);

                                        if($horario_rs[$rs_i]['Salon_desc'] != '') {
                                            if($horario_rs[$rs_i]['Salon_desc_larga'] != '')
                                                $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc'].' ['.$horario_rs[$rs_i]['Salon_desc_larga'].']');
                                            else
                                                $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc']);
                                        } else{
                                            if(!isset($horario_rs[$rs_i]['TipoSubmateria_id']) || $horario_rs[$rs_i]['TipoSubmateria_id'] == 0)
                                                $xtpl->assign('SALON', '<em>Pendinte</em>');
                                            else
                                                $xtpl->assign('SALON', '*');
                                        }

                                        $xtpl->parse('main.hora_row.td.td_horario.hora');
                                        $xtpl->parse('main.hora_row.td.td_horario.texto');
                                        $xtpl->parse('main.hora_row.td.td_horario.grupo');
                                        $xtpl->parse('main.hora_row.td.td_horario.spacer');
                                        $xtpl->parse('main.hora_row.td.td_horario');
                                    } else {
                                        switch ($horario_rs[$rs_i]['TipoHorario_id']){
                                            case 1: $xtpl->assign('CLASE', 'atencion'); break;
                                            case 2: $xtpl->assign('CLASE', 'gestion'); break;
                                        }
                                        $xtpl->assign('HORA_I', substr($horario_rs[$rs_i]['Hora_inicio'], 0, 5));
                                        $xtpl->assign('HORA_F', substr($horario_rs[$rs_i]['Hora_final'], 0, 5));

                                        $xtpl->parse('main.hora_row.td.td_bloque.hora');
                                        $xtpl->parse('main.hora_row.td.td_bloque.spacer');
                                        $xtpl->parse('main.hora_row.td.td_bloque');
                                    }
                                }else
                                    $xtpl->parse('main.hora_row.td.td_vacio');
                                $rs_i++;
                            }else{
                                if(!isset($spacerArr[$dia['Dia_id']]) || $spacerArr[$dia['Dia_id']] == 0){
                                    $xtpl->assign('ID_DIA', $dia['Dia_id']);
                                    $xtpl->parse('main.hora_row.td.td_vacio');
                                }else
                                    $spacerArr[$dia['Dia_id']]--;
                            }
                            $xtpl->parse('main.hora_row.td');
                        }
                        $xtpl->parse('main.hora_row');
                    }
                }

                $xtpl->parse('main');
                $return['html'] = $xtpl->text('main');
                $return['tabla'] = true;
            } else {
                $return['html'] = '<div class="marco">
                        <div class="msgAviso d-flex flex-row justify-content-between align-items-stretch mt-4">
                            <div class="iconAviso bg-danger d-flex justify-content-center align-items-center"><i class="display-3 ing-cancelar"></i></div>
                            <div class="txtAviso flex-grow-1 d-flex flex-column justify-content-center align-items-center">
                                <div class="display-5 indivisa-text-black mb-3">¡Error!</div>
                                <div class="text-center">' . $error . '</div>
                            </div>
                        </div>
                    </div>';
                $return['tabla'] = false;
            }
            break;
        case 3: //Extraordinario
            if (isset($_POST['plan']) && isset($_POST['semestre']) && isset($_POST['periodo'])) {
                $xtpl = new XTemplate('../templates/horario_extras.tpl.html');
                //$examenes_extraordinarios = SGI::getExtraordinarios($pdo, filter_input(INPUT_POST, 'periodo', FILTER_SANITIZE_NUMBER_INT), filter_input(INPUT_POST, 'semestre', FILTER_SANITIZE_NUMBER_INT), filter_input(INPUT_POST, 'plan', FILTER_SANITIZE_NUMBER_INT));
                //Tiene el id del periodo fijo porque aú no existe un indicador de extraordinarios activos
                $examenes_extraordinarios = SGI::getExtraordinarios($pdo, 38, filter_input(INPUT_POST, 'semestre', FILTER_SANITIZE_NUMBER_INT), filter_input(INPUT_POST, 'plan', FILTER_SANITIZE_NUMBER_INT));
                if (count($examenes_extraordinarios) == 0){
                    $xtpl->parse('main.sin_extras');                                        
                } else {
                    foreach ($examenes_extraordinarios as $examen) {
                        $xtpl->assign('MATERIA', $examen['Materia_desc']);
                        $salon = $examen["Salon_desc"];
                        if(!empty($examen["Salon_desc_larga"]))
                            $salon .= "-".$examen["Salon_desc_larga"];
                        if (empty($salon))
                            $xtpl->assign('SALON', '<i>Pendiente</i>');
                        else
                            $xtpl->assign('SALON', $salon);
                        $xtpl->assign('PROFESOR', $examen["Profesor_nombre"] . " " . $examen["Profesor_apellidos"]);
                        $xtpl->assign('FECHA', substr($examen["Examen_fechahora_inicial"], 0, 10));
                        $xtpl->assign('HORA', substr($examen["Examen_fechahora_inicial"], 10, 6) . ' - ' . substr($examen["Examen_fechahora_final"], 10, 6));
                        $xtpl->parse('main.extras.row');                        
                    }
                    $xtpl->parse('main.extras'); 
                }
                $xtpl->parse('main');
                $return['html'] = $xtpl->text('main');
            } else
                $return['html'] = '<h3 class="text-danger text-center mt-4">No fue posible obtener los horarios de los extraordinarios</h3>';
            break;
    }
}
$return['json'] = json_encode($return);
echo json_encode($return);

function horaMin($arr, $campo){
    $min = '';
    foreach($arr as $horario){
        if($min == '' || date('H:i', strtotime($horario[$campo])) < date('H:i', strtotime($min))){
            $min = $horario[$campo];
        }
    }
    return date('H:i', strtotime($min));
}
function horaMax($arr, $campo){
    $max = '';
    foreach($arr as $horario){
        if($max == '' || date('H:i', strtotime($horario[$campo])) > date('H:i', strtotime($max))){
            $max = $horario[$campo];
        }
    }
    return date('H:i', strtotime($max));
}
function diaNombre($num){
    $dias = array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado');
    return $dias[intval($num)];
}