<?php
// Iniciar sesión
session_start();

// Incluir la clase de conexión y la auditoría
require_once '../../Controlador/Utilidades/Conexion_BD.php';
require_once '../../Controlador/Utilidades/Auditoria.php'; // <--- ¡AUDITORÍA!

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // Recuperar los datos del formulario
    $id_usuario = $_POST["id_usuario"];
    $usuario = $_POST["usuario"];
    $contrasena = $_POST["contrasena"];
    $nombre = $_POST["nombre"];
    $apellido = $_POST["apellido"];
    $correo = $_POST["correo"];
    $telefono = $_POST["telefono"];
    $id_cargo = $_POST["rolusuario"];

    // Encriptar la contraseña solo si se recibió algo en el campo contraseña
    if (!empty($contrasena)) {
        $contrasena_encriptada = password_hash($contrasena, PASSWORD_DEFAULT);
    } else {
        $contrasena_encriptada = null;
    }

    // Crear conexión
    $connMySQL = new Conexion_BD();

    // === OBTENER DATOS ORIGINALES PARA AUDITORÍA ===
    $sqlOrig = "SELECT usuario, nombre, apellido, correo, telefono, id_cargo FROM usuarios WHERE id_usuario = ?";
    $stmtOrig = $connMySQL->prepare($sqlOrig);
    $stmtOrig->bind_param("i", $id_usuario);
    $stmtOrig->execute();
    $resOrig = $stmtOrig->get_result();
    $original = $resOrig->fetch_assoc();
    $stmtOrig->close();

    // Si la contraseña está vacía, no la actualizamos
    if ($contrasena_encriptada !== null) {
        $sql = "UPDATE usuarios 
                SET usuario=?, contrasena=?, nombre=?, apellido=?, correo=?, telefono=?, id_cargo=? 
                WHERE id_usuario=?";
        $stmt = $connMySQL->prepare($sql);
        $stmt->bind_param(
            "ssssssii",
            $usuario,
            $contrasena_encriptada,
            $nombre,
            $apellido,
            $correo,
            $telefono,
            $id_cargo,
            $id_usuario
        );
    } else {
        // Excluir campo contraseña
        $sql = "UPDATE usuarios 
                SET usuario=?, nombre=?, apellido=?, correo=?, telefono=?, id_cargo=? 
                WHERE id_usuario=?";
        $stmt = $connMySQL->prepare($sql);
        $stmt->bind_param(
            "ssssiii",
            $usuario,
            $nombre,
            $apellido,
            $correo,
            $telefono,
            $id_cargo,
            $id_usuario
        );
    }

    if ($stmt->execute()) {
        // ======== AUDITORÍA ========
        $id_usuario_editor = $_SESSION['id_usuario'] ?? 0;
        $nombre_editor = $_SESSION['usuario'] ?? 'sistema';
        $tipo_usuario = $_SESSION['rol'] ?? '';

        // Detectar cambios campo a campo
        $cambios = [];
        if ($original['usuario'] !== $usuario) {
            $cambios[] = "usuario: [{$original['usuario']} → $usuario]";
        }
        if ($original['nombre'] !== $nombre) {
            $cambios[] = "nombre: [{$original['nombre']} → $nombre]";
        }
        if ($original['apellido'] !== $apellido) {
            $cambios[] = "apellido: [{$original['apellido']} → $apellido]";
        }
        if ($original['correo'] !== $correo) {
            $cambios[] = "correo: [{$original['correo']} → $correo]";
        }
        if ($original['telefono'] !== $telefono) {
            $cambios[] = "telefono: [{$original['telefono']} → $telefono]";
        }
        if ($original['id_cargo'] != $id_cargo) {
            $cambios[] = "rolusuario: [{$original['id_cargo']} → $id_cargo]";
        }
        if (!empty($contrasena)) {
            $cambios[] = "contraseña: [cambiada]";
        }

        $descripcion = "Se editó el usuario ID: $id_usuario ($usuario)";
        if ($cambios) {
            $descripcion .= " | " . implode(' | ', $cambios);
        }

        registrarAuditoria(
            'usuarios',          // módulo
            'editar',            // acción
            $descripcion,        // descripción
            $id_usuario_editor,  // id_usuario (quién ejecuta)
            $nombre_editor,      // nombre_usuario (quién ejecuta)
            'usuarios',          // tabla_afectada
            $id_usuario,         // id_registro_afectado
            $tipo_usuario        // tipo_usuario
        );
        // ===========================
        $_SESSION['usuarioUpdate'] = $usuario;
        header("Location: ../../Vista/Administrador/Adm_Gestion_Usuarios.php");
        exit();
    } else {
        $connMySQL->closeConnection();
        header("Location: ../../Controlador/Utilidades/Sesion_Destroy.php");
        exit();
    }

} else {
    header("Location: ../../Vista/General/Adm_Menu_Navegacion.php");
    exit();
}
?>
