<?php
    session_start();
    class StudentModel {

        private $_db;

        /* CONSTRUCTOR */
        public function __construct() {
            $this->_db = new Base;
     
        }

        /* OBTENER TODOS LOS ESTUDIANTES */
        public function getAllStudents() {
            $this->_db->query('SELECT 
                                    CodigoEstudiante,
                                    e.Nombre, 
                                    ea.NombreEstado,
                                    p.Nombre as programa, 
                                    a.NombreAcuerdo as acuerdo 
                                FROM 
                                    estudiantes e 
                                inner join estados_academicos ea on e.EstadoAcademicoId = ea.EstadoAcademicoId 
                                inner join programas p on e.ProgramaId = p.ProgramaId 
                                inner join acuerdos a on e.AcuerdoId = a.AcuerdoId;');
            $this->_db->execute();

            if($this->_db->rowCount() > 0){
                $students = $this->_db->rows_assoc();
            }else{
                $students = [];
            }
            return $students;
        }

        public function getStudentById($id) {
            $this->_db->query('SELECT 
                                    CodigoEstudiante,
                                    e.Nombre, 
                                    ea.NombreEstado,
                                    p.Nombre as programa, 
                                    a.NombreAcuerdo as acuerdo 
                                FROM 
                                    estudiantes e 
                                inner join estados_academicos ea on e.EstadoAcademicoId = ea.EstadoAcademicoId 
                                inner join programas p on e.ProgramaId = p.ProgramaId 
                                inner join acuerdos a on e.AcuerdoId = a.AcuerdoId
                                WHERE e.CodigoEstudiante = :id;');
            $this->_db->bind(':id', $id);
            $this->_db->execute();

            if($this->_db->rowCount() > 0){
                $student = $this->_db->rows_assoc();
            }else{
                $student = [];
            }
            return $student;
        }

        public function updateStudent($id, $data) {
            $this->_db->query('UPDATE estudiantes SET Nombre = :nombre, EstadoAcademicoId = :estadoAcademicoId, ProgramaId = :programaId, AcuerdoId = :acuerdoId WHERE CodigoEstudiante = :id;');
            $this->_db->bind(':id', $id);
            $this->_db->bind(':nombre', $data['nombre']);
            $this->_db->bind(':estadoAcademicoId', $data['estado_academico']);
            $this->_db->bind(':programaId', $data['programa']);
            $this->_db->bind(':acuerdoId', $data['acuerdo']);
            $this->_db->execute();

            $dataAnterior = $this->getStudentById($id);
            if($this->_db->rowCount() > 0){
                $this->insertAuditoriaEventos([
                    'usuario_id' => $_SESSION['UsuarioId'],
                    'usuario_nombre' => $_SESSION['Usuario'],
                    'tipo_evento' => 'UPDATE',
                    'nombre_tabla' => 'estudiantes',
                    'llave_primaria' => $id,
                    'valores_anteriores' => json_encode($dataAnterior),
                    'valores_nuevos' => json_encode($data),
                    'ip_origen' => $_SERVER['REMOTE_ADDR'],
                    'aplicacion_origen' => 'UdLosesSubjects',
                    'comentario' => 'Actualización de estudiante'
                ]);
                return true;
            }else{
                return false;
            }
        }

        public function getEstadosAcademicos() {
            $this->_db->query('SELECT e.EstadoAcademicoId, e.NombreEstado FROM estados_academicos e;');
            $this->_db->execute();

            if($this->_db->rowCount() > 0){
                $estados = $this->_db->rows_assoc();
            }else{
                $estados = [];
            }
            return $estados;
        }

        public function getProgramas() {
            $this->_db->query('SELECT p.ProgramaId, p.Nombre FROM programas p;');
            $this->_db->execute();

            if($this->_db->rowCount() > 0){
                $programas = $this->_db->rows_assoc();
            }else{
                $programas = [];
            }
            return $programas;
        }

        public function getAcuerdos() {
            $this->_db->query('SELECT a.AcuerdoId, a.NombreAcuerdo FROM acuerdos a;');
            $this->_db->execute();

            if($this->_db->rowCount() > 0){
                $acuerdos = $this->_db->rows_assoc();
            }else{
                $acuerdos = [];
            }
            return $acuerdos;
        }

        
    public function insertAuditoriaEventos($data){
        $query = "INSERT INTO `auditoria_eventos`(`usuario_id`,
                                                  `usuario_nombre`,
                                                  `tipo_evento`,
                                                  `nombre_tabla`,
                                                  `llave_primaria`,
                                                  `valores_anteriores`,
                                                  `valores_nuevos`,
                                                  `ip_origen`,
                                                  `aplicacion_origen`,
                                                  `comentario`) VALUES 
                                                  (:usuario_id,
                                                   :usuario_nombre,
                                                   :tipo_evento,
                                                   :nombre_tabla,
                                                   :llave_primaria,
                                                   :valores_anteriores,
                                                   :valores_nuevos,
                                                   :ip_origen,
                                                   :aplicacion_origen,
                                                   :comentario)";
        $this->_db->query($query);
        $this->_db->bind(':usuario_id', $data['usuario_id']);
        $this->_db->bind(':usuario_nombre', $data['usuario_nombre']);
        $this->_db->bind(':tipo_evento', $data['tipo_evento']);
        $this->_db->bind(':nombre_tabla', $data['nombre_tabla']);
        $this->_db->bind(':llave_primaria', $data['llave_primaria']);
        $this->_db->bind(':valores_anteriores', $data['valores_anteriores']);
        $this->_db->bind(':valores_nuevos', $data['valores_nuevos']);
        $this->_db->bind(':ip_origen', $data['ip_origen']);
        $this->_db->bind(':aplicacion_origen', $data['aplicacion_origen']);
        $this->_db->bind(':comentario', $data['comentario']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            return true;
        }else{
            return false;
        }
    }
    }   
?>