<?php
session_start(); //Se abre las variables de sesion
class ViewDataV1 extends Controller {

    private $_viewDataModel;
	public function __construct() {
		$this->_viewDataModel = $this->model('ViewDataModelV1');
	}

	public function index() {
        // Obtener filtros desde GET (si los hay)
        $filtrosIniciales = $_GET ?? [];
        
        // Obtener datos para los filtros
        $acuerdos = $this->_viewDataModel->getAcuerdos();
        $archivos = $this->_viewDataModel->getArchivos();
        $estadosAcademicos = $this->_viewDataModel->getEstadosAcademicos();
        $estudiantes = $this->_viewDataModel->getEstudiantes();
		$programas = $this->_viewDataModel->getProgramas();
		$cursos = $this->_viewDataModel->getCursos();
		$periodos = $this->_viewDataModel->getPeriodos();
        
        // Cargar datos iniciales para gráficos
        $promedioPorPeriodo = $this->_viewDataModel->getPromedioPorPeriodo($filtrosIniciales);
        $distribucionPorEstado = $this->_viewDataModel->getDistribucionNotasPorEstado($filtrosIniciales);
        $rendimientoPorMateria = $this->_viewDataModel->getRendimientoPorMateria($filtrosIniciales);
        $getTop5EstudiantesRendimiento = $this->_viewDataModel->getTop5EstudiantesRendimiento($filtrosIniciales);
        $getTop5EstudiantesPeorRendimiento = $this->_viewDataModel->getTop5EstudiantesPeorRendimiento($filtrosIniciales);

        $this->view('ViewDataV1/index', [
            'archivos' => $archivos,
            'acuerdos' => $acuerdos,
            'estadosAcademicos' => $estadosAcademicos,
            'estudiantes' => $estudiantes,
            'programas' => $programas,
			'cursos' => $cursos,
			'periodos' => $periodos,
            // Datos para gráficos
            'promedioPorPeriodo' => $promedioPorPeriodo,
            'distribucionPorEstado' => $distribucionPorEstado,
            'rendimientoPorMateria' => $rendimientoPorMateria,
            'getTop5EstudiantesRendimiento' => $getTop5EstudiantesRendimiento,
            'getTop5EstudiantesPeorRendimiento' => $getTop5EstudiantesPeorRendimiento

        ]);
    }

    public function filter() {
        if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    
            // Parámetros de paginación
            $pagina = isset($_GET['pagina']) && is_numeric($_GET['pagina']) && $_GET['pagina'] > 0 ? (int)$_GET['pagina'] : 1;
            $porPagina = 10; // Cambia si quieres más o menos registros por página
            // Llamar al modelo con filtros y paginación
            $resultado = $this->_viewDataModel->consultaDinamica($_GET, $pagina, $porPagina);
    
            
            $listado = $resultado['datos'];
            $totalRegistros = $resultado['total'];
            $totalPaginas = ceil($totalRegistros / $porPagina);
    
            $promedioPorPeriodo = $this->_viewDataModel->getPromedioPorPeriodo($_GET);
    
            // Filtros aplicados (para conservar selección en la vista)
            $filtros = [
                'estado_academico' => isset($_GET['estado_academico']) ? (array)$_GET['estado_academico'] : [],
                'anio' => $_GET['anio'] ?? '',
                'periodo' => $_GET['periodo'] ?? '',
                'fecha_subida' => $_GET['fecha_subida'] ?? '',
                'proyecto_curricular' => $_GET['proyecto_curricular'] ?? '',
                'espacio_academico' => $_GET['espacio_academico'] ?? '',
                'codigo_acuerdo' => $_GET['codigo_acuerdo'] ?? '',
                'grupo' => $_GET['grupo'] ?? '',
            ];
    
            // Renderizar tabla con datos y paginación
            $this->view('components/table', [
                'listado' => $listado,
                'pagina' => $pagina,
                'totalPaginas' => $totalPaginas,        
                'totalRegistros' => $totalRegistros,
                'porPagina' => $porPagina
            ]);
        }
    }

    public function graphics() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
            // Obtener datos para diferentes tipos de gráficos aplicando los filtros
            $promedioPorPeriodo = $this->_viewDataModel->getPromedioPorPeriodo($_GET);
            $distribucionPorEstado = $this->_viewDataModel->getDistribucionNotasPorEstado($_GET);
            $rendimientoPorMateria = $this->_viewDataModel->getRendimientoPorMateria($_GET);
            $getTop5EstudiantesRendimiento = $this->_viewDataModel->getTop5EstudiantesRendimiento($_GET);
            $getTop5EstudiantesPeorRendimiento = $this->_viewDataModel->getTop5EstudiantesPeorRendimiento($_GET);
            // Para debug - mostrar los filtros aplicados
            echo "<script>console.log('Filtros aplicados: " . json_encode($_GET) . "');</script>";
            echo "<script>console.log('Promedio por período: " . json_encode($promedioPorPeriodo) . "');</script>";
            echo "<script>console.log('Rendimiento por materia: " . json_encode($rendimientoPorMateria) . "');</script>";
            
            $this->view('components/graphics', [
                'promedioPorPeriodo' => $promedioPorPeriodo,
                'distribucionPorEstado' => $distribucionPorEstado,
                'rendimientoPorMateria' => $rendimientoPorMateria,
                'getTop5EstudiantesRendimiento' => $getTop5EstudiantesRendimiento,
                'getTop5EstudiantesPeorRendimiento' => $getTop5EstudiantesPeorRendimiento,
                'filtros' => $_GET
            ]);
        }
    }

    /* Filtros dependientes */
    // estados academicos
    public function getPeriodosPorEstadoAcademico() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $estadoAcademico = $_GET['estadoAcademico'];
        $periodos = $this->_viewDataModel->getPeriodosPorEstadoAcademico($estadoAcademico);
        echo json_encode($periodos);
        }
    }
    public function getProyectosPorEstadoAcademico() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $estadoAcademico = $_GET['estadoAcademico'];
        $proyectos = $this->_viewDataModel->getProyectosPorEstadoAcademico($estadoAcademico);
        echo json_encode($proyectos);
        }
    }
    public function getEspaciosAcademicosPorEstadoAcademico() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $estadoAcademico = $_GET['estadoAcademico'];
        $espacios = $this->_viewDataModel->getEspaciosAcademicosPorEstadoAcademico($estadoAcademico);
        echo json_encode($espacios);
        }
    }
    public function getArchivosPorEstadoAcademico() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $estadoAcademico = $_GET['estadoAcademico'];
        $archivos = $this->_viewDataModel->getArchivosPorEstadoAcademico($estadoAcademico);
        echo json_encode($archivos);
        }
    }



    //periodos
    public function getEstadosPorPeriodo() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $periodo = $_GET['periodo'];
        $estados = $this->_viewDataModel->getEstadosAcademicosPorPeriodo($periodo);
        echo json_encode($estados);
        }
    }
    
    public function getProyectosPorPeriodo() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $periodo = $_GET['periodo'];
        $proyectos = $this->_viewDataModel->getProyectosPorPeriodo($periodo);
        echo json_encode($proyectos);
        }
    }

    public function getCursosPorPeriodo() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $periodo = $_GET['periodo'];
        $cursos = $this->_viewDataModel->getCursosPorPeriodo($periodo);
        echo json_encode($cursos);
        }
    }

    public function getArchivosPorPeriodo() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
        $periodo = $_GET['periodo'];
        
        $archivos = $this->_viewDataModel->getArchivosPorPeriodo($periodo);
        echo json_encode($archivos);
        }
    }

    /**
     * Método unificado para obtener todos los filtros dependientes
     * Recibe los filtros activos y devuelve todos los datos disponibles
     */
    public function obtenerFiltrosDependientes() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
            // Obtener filtros activos desde la petición
            $filtrosActivos = [];
            
            // Permitir múltiples periodos separados por coma (por ejemplo: 2024-3,2025-1)
            if (!empty($_GET['periodo']) && $_GET['periodo'] !== '0') {
                // Si el valor contiene una coma, convertirlo en array
                if (strpos($_GET['periodo'], ',') !== false) {
                    $filtrosActivos['periodo'] = explode(',', $_GET['periodo']);
                } else {
                    $filtrosActivos['periodo'] = $_GET['periodo'];
                }
            }
            
            if (!empty($_GET['estado_academico']) && $_GET['estado_academico'] !== '0') {
                $filtrosActivos['estado_academico'] = $_GET['estado_academico'];
            }
            
            if (!empty($_GET['programa']) && $_GET['programa'] !== '0') {
                $filtrosActivos['programa'] = $_GET['programa'];
            }
            
            if (!empty($_GET['curso']) && $_GET['curso'] !== '0') {
                $filtrosActivos['curso'] = $_GET['curso'];
            }
            
            if (!empty($_GET['archivo']) && $_GET['archivo'] !== '0') {
                $filtrosActivos['archivo'] = $_GET['archivo'];
            }
            
            if (!empty($_GET['estudiante']) && $_GET['estudiante'] !== '0') {
                $filtrosActivos['estudiante'] = $_GET['estudiante'];
            }

            // Obtener todos los datos de filtros dependientes
            $datosFiltros = $this->_viewDataModel->obtenerDatosFiltrosDependientes($filtrosActivos);
            
            // Devolver como JSON
            header('Content-Type: application/json');
            echo json_encode($datosFiltros);
        }
    }

    /**
     * Método para obtener un filtro específico (mantener compatibilidad)
     */
    public function obtenerFiltroEspecifico() {
        if(isset($_SESSION['UsuarioId']) == false){
            redirect("/Login");
        }
        
        if($_SERVER['REQUEST_METHOD'] == 'GET'){
            $tipoFiltro = $_GET['tipo'] ?? '';
            
            // Obtener filtros activos
            $filtrosActivos = [];
            
            if (!empty($_GET['periodo']) && $_GET['periodo'] !== '0') {
                $filtrosActivos['periodo'] = $_GET['periodo'];
            }
            
            if (!empty($_GET['estado_academico']) && $_GET['estado_academico'] !== '0') {
                $filtrosActivos['estado_academico'] = $_GET['estado_academico'];
            }
            
            if (!empty($_GET['programa']) && $_GET['programa'] !== '0') {
                $filtrosActivos['programa'] = $_GET['programa'];
            }

            // Obtener datos del filtro específico
            $datos = $this->_viewDataModel->obtenerDatosFiltroEspecifico($tipoFiltro, $filtrosActivos);
            
            header('Content-Type: application/json');
            echo json_encode($datos);
        }
    }

}
?>