<?php 

require_once "conexion.php";

class ModeloAuditoria {

    static public function mdlIngresarAuditoria($tabla, $datos) {
        $stmt = Conexion::conectar()->prepare("INSERT INTO $tabla (usuario_id, rol_id, modulo, accion, descripcion, ip_origen) VALUES (:usuario_id, :rol_id, :modulo, :accion, :descripcion, :ip_origen)");

        $stmt->bindParam(":usuario_id", $datos["usuario_id"], PDO::PARAM_INT);
        $stmt->bindParam(":rol_id", $datos["rol_id"], PDO::PARAM_INT);
        $stmt->bindParam(":modulo", $datos["modulo"], PDO::PARAM_STR);
        $stmt->bindParam(":accion", $datos["accion"], PDO::PARAM_STR);
        $stmt->bindParam(":descripcion", $datos["descripcion"], PDO::PARAM_STR);
        $stmt->bindParam(":ip_origen", $datos["ip_origen"], PDO::PARAM_STR);

        if ($stmt->execute()) {
            return "ok";
        } else {
            return "error";
        }
    }


    static public function mdlMostrarAuditoria($tabla, $fechaInicial, $fechaFinal){

        if($fechaInicial == null){
            
            $stmt = Conexion::conectar()->prepare("SELECT a.*, e.nombre as usuario, r.nombre as rol FROM $tabla a INNER JOIN usuario u ON a.usuario_id = u.id_usuario INNER JOIN empleado e ON u.id_empleado = e.id_empleado INNER JOIN rol r ON a.rol_id = r.id ORDER BY fecha_hora DESC LIMIT 500");
            $stmt->execute();
            return $stmt->fetchAll();

        } else if($fechaInicial == $fechaFinal){

            // Filtramos un solo día completo
            $stmt = Conexion::conectar()->prepare("SELECT a.*, e.nombre as usuario, r.nombre as rol FROM $tabla a INNER JOIN usuario u ON a.usuario_id = u.id_usuario INNER JOIN empleado e ON u.id_empleado = e.id_empleado INNER JOIN rol r ON a.rol_id = r.id WHERE DATE(fecha_hora) = :fecha ORDER BY fecha_hora DESC");
            $stmt->bindParam(":fecha", $fechaInicial, PDO::PARAM_STR);
            $stmt->execute();
            return $stmt->fetchAll();

        } else {

            // Filtramos rango (incluimos hora para asegurar el día final completo)
            $fechaFinalFull = $fechaFinal . " 23:59:59";
            $fechaInicialFull = $fechaInicial . " 00:00:00";

            $stmt = Conexion::conectar()->prepare("SELECT a.*, e.nombre as usuario, r.nombre as rol FROM $tabla a INNER JOIN usuario u ON a.usuario_id = u.id_usuario INNER JOIN empleado e ON u.id_empleado = e.id_empleado INNER JOIN rol r ON a.rol_id = r.id WHERE fecha_hora BETWEEN :fechaInicial AND :fechaFinal ORDER BY fecha_hora DESC");
            $stmt->bindParam(":fechaInicial", $fechaInicialFull, PDO::PARAM_STR);
            $stmt->bindParam(":fechaFinal", $fechaFinalFull, PDO::PARAM_STR);
            
            $stmt->execute();
            return $stmt->fetchAll();
        }
    }

}