<?php

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

    public function getAllAgreements() {
        $query = "SELECT AcuerdoId, NombreAcuerdo FROM acuerdos";
        $this->_db->query($query);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $agreements = $this->_db->rows_assoc();
        }else{
            $agreements = [];
        }
        return $agreements;
    }

    public function getAgreementById($id) {
        $query = "SELECT a.AcuerdoId,a.NombreAcuerdo FROM acuerdos a WHERE a.AcuerdoId = :id";
        $this->_db->query($query);
        $this->_db->bind(':id', $id);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $agreement = $this->_db->rows_assoc();
        }else{
            $agreement = [];
        }
        return $agreement;
    }

    public function updateAgreement($id, $data) {
        $this->_db->query("SELECT * FROM acuerdos WHERE AcuerdoId = :acuerdoId");
        $this->_db->bind(':acuerdoId', $data['codigo']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            return false;
        }
        $dataAnterior = $this->getAgreementById($id);

        $query = "UPDATE acuerdos SET NombreAcuerdo = :nombreAcuerdo, AcuerdoId = :acuerdoId WHERE AcuerdoId = :id";
        $this->_db->query($query);
        $this->_db->bind(':id', $id);
        $this->_db->bind(':nombreAcuerdo', $data['nombre']);
        $this->_db->bind(':acuerdoId', $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' => 'acuerdos',
                '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 acuerdo'
            ]);
         return true;
        }else{
            return false;
        }
    }

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

        $query = "INSERT INTO acuerdos (NombreAcuerdo, AcuerdoId) VALUES (:nombreAcuerdo, :acuerdoId)";
        $this->_db->query($query);
        $this->_db->bind(':nombreAcuerdo', $data['nombreAcuerdo']);
        $this->_db->bind(':acuerdoId', $data['acuerdoId']);
        $this->_db->execute();
        if($this->_db->rowCount() > 0){
            $this->insertAuditoriaEventos([
                'usuario_id' => $_SESSION['UsuarioId'],
                'usuario_nombre' => $_SESSION['Usuario'],
                'tipo_evento' => 'INSERT',
                'nombre_tabla' => 'acuerdos',
                'llave_primaria' => $data['acuerdoId'],
                'valores_anteriores' => json_encode([]),
                'valores_nuevos' => json_encode($data),
                'ip_origen' => $_SERVER['REMOTE_ADDR'],
                'aplicacion_origen' => 'UdLosesSubjects',
                'comentario' => 'Creación de acuerdo'
            ]);
            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;
        }
    }
}
