<?php

class CourseModel  {
    
    private $_db;

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

    public function getAllCourses() {
        $query = "SELECT Codigo,Nombre FROM cursos";
        $this->_db->query($query);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $courses = $this->_db->rows_assoc();
        }else{
            $courses = [];
        }
        return $courses;
    }
    
    public function getCourseById($id) {
        $query = "SELECT c.Codigo, c.Nombre FROM cursos c WHERE c.Codigo = :id";
        $this->_db->query($query);
        $this->_db->bind(':id', $id);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $course = $this->_db->rows_assoc();
        }else{
            $course = [];
        }
        return $course;
    }
    
    public function updateCourse($id, $data) {
        $this->_db->query("SELECT * FROM cursos WHERE Codigo = :codigo");
        $this->_db->bind(':codigo', $data['codigo']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            return false;
        }
        $dataAnterior = $this->getCourseById($id);
        
        $query = "UPDATE cursos SET Nombre = :nombre, Codigo = :codigo WHERE Codigo = :id";
        $this->_db->query($query);
        $this->_db->bind(':id', $id);
        $this->_db->bind(':nombre', $data['nombre']);
        $this->_db->bind(':codigo', $data['codigo']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $this->insertAuditoriaEventos([
                'usuario_id' => $_SESSION['UsuarioId'],
                'usuario_nombre' => $_SESSION['Usuario'],
                'tipo_evento' => 'UPDATE',
                'nombre_tabla' => 'cursos',
                '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 curso'
            ]);
            return true;
        }else{
            return false;
        }
    }
    public function createCourse($data) {
        $this->_db->query("SELECT * FROM cursos WHERE Codigo = :codigo");
        $this->_db->bind(':codigo', $data['Codigo']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            return false;
        }

        $query = "INSERT INTO cursos (Nombre, Codigo) VALUES (:nombre, :codigo)";
        $this->_db->query($query);
        $this->_db->bind(':nombre', $data['Nombre']);
        $this->_db->bind(':codigo', $data['Codigo']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $this->insertAuditoriaEventos([
                'usuario_id' => $_SESSION['UsuarioId'],
                'usuario_nombre' => $_SESSION['Usuario'],
                'tipo_evento' => 'INSERT',
                'nombre_tabla' => 'cursos',
                'llave_primaria' => $data['Codigo'],
                'valores_anteriores' => json_encode([]),
                'valores_nuevos' => json_encode($data),
                'ip_origen' => $_SERVER['REMOTE_ADDR'],
                'aplicacion_origen' => 'UdLosesSubjects',
                'comentario' => 'Creación de curso'
            ]);
            return true;
        }else{
            return false;
        }
    }


    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_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;
        }
    }
}   