<?php

class ProgramModel {
    private $_db;
    
    public function __construct() {
        $this->_db = new Base;
    }
    
    public function getAllPrograms() {
        $query = "SELECT * FROM programas";
        $this->_db->query($query);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $programs = $this->_db->rows_assoc();
        }else{
            $programs = [];
        }
        return $programs;
    }
    
    public function getProgramById($id) {
        $query = "SELECT p.Codigo, p.Nombre FROM programas p WHERE p.Codigo = :id";
        $this->_db->query($query);
        $this->_db->bind(':id', $id);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $program = $this->_db->rows_assoc();
        }else{
            $program = [];
        }
        return $program;
    }

    public function updateProgram($id, $data) {
        $this->_db->query("SELECT * FROM programas WHERE Codigo = :codigo and nombre = :nombre");
        $this->_db->bind(':codigo', $data['codigo']);
        $this->_db->bind(':nombre', $data['nombre']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            return false;
        }
        
        $dataAnterior = $this->getProgramById($id);
        $query = "UPDATE programas 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' => 'programas',
                '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 programa'
            ]);
         return true;
        }else{
            return false;
        }
    }

    public function createProgram($data) {
        $this->_db->query("SELECT * FROM programas WHERE Codigo = :codigo");
        $this->_db->bind(':codigo', $data['Codigo']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            return false;
        }

        $query = "INSERT INTO programas (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' => 'programas',
                '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 programa'
            ]);
            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_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;
        }
    }
}
?>
