<?php
session_start();

require_once '../../Controlador/Utilidades/Conexion_BD.php';
require_once '../../Controlador/Utilidades/Auditoria.php'; // <--- Auditoría

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $id_chofer = intval($_POST["id_chofer"]);
    $nombres = strtoupper(trim($_POST["nombres"]));
    $apellidos = strtoupper(trim($_POST["apellidos"]));
    $dni = trim($_POST["dni"]);
    $categoria_licencia = strtoupper(trim($_POST["categoria_licencia"]));
    $telefono = trim($_POST["telefono"]);

    $connMySQL = new Conexion_BD();
    $conexion = $connMySQL->getConnection();

    try {
        // Verificar si el DNI ya está en uso por otro chofer
        $sqlVerificar = "SELECT COUNT(*) AS total FROM choferes WHERE dni = ? AND id != ?";
        $stmtVerificar = $conexion->prepare($sqlVerificar);
        $stmtVerificar->bind_param("si", $dni, $id_chofer);
        $stmtVerificar->execute();
        $resultado = $stmtVerificar->get_result();
        $fila = $resultado->fetch_assoc();
        $stmtVerificar->close();

        if ($fila['total'] > 0) {
            $_SESSION['error_dni'] = "El DNI \"$dni\" ya está registrado por otro conductor.";
            header("Location: ../../Vista/Administrador/Adm_Editar_Chofer.php?IC=" . urlencode($id_chofer));
            exit();
        }

        // Obtener datos originales antes de la actualización para auditoría
        $sqlOld = "SELECT nombres, apellidos, dni, categoria_licencia, telefono FROM choferes WHERE id = ?";
        $stmtOld = $conexion->prepare($sqlOld);
        $stmtOld->bind_param("i", $id_chofer);
        $stmtOld->execute();
        $resOld = $stmtOld->get_result();
        $datosOriginales = $resOld->fetch_assoc();
        $stmtOld->close();

        // Actualizar chofer si no hay conflicto
        $sql = "UPDATE choferes 
                SET nombres=?, apellidos=?, dni=?, categoria_licencia=?, telefono=? 
                WHERE id=?";
        $stmt = $conexion->prepare($sql);
        $stmt->bind_param("sssssi", $nombres, $apellidos, $dni, $categoria_licencia, $telefono, $id_chofer);

        if ($stmt->execute()) {
            // ======= AUDITORÍA DETALLADA =======
            $id_usuario = $_SESSION['id_usuario'] ?? 0;
            $nombre_usuario = $_SESSION['nombre'] ?? $_SESSION['usuario'] ?? 'sistema';
            $tipo_usuario = $_SESSION['rol'] ?? '';
            $tabla_afectada = 'choferes';

            // Comparar los campos para mostrar solo los que cambiaron
            $cambios = [];
            if ($datosOriginales) {
                if ($datosOriginales['nombres'] !== $nombres) {
                    $cambios[] = "Nombres: '{$datosOriginales['nombres']}' → '$nombres'";
                }
                if ($datosOriginales['apellidos'] !== $apellidos) {
                    $cambios[] = "Apellidos: '{$datosOriginales['apellidos']}' → '$apellidos'";
                }
                if ($datosOriginales['dni'] !== $dni) {
                    $cambios[] = "DNI: '{$datosOriginales['dni']}' → '$dni'";
                }
                if ($datosOriginales['categoria_licencia'] !== $categoria_licencia) {
                    $cambios[] = "Licencia: '{$datosOriginales['categoria_licencia']}' → '$categoria_licencia'";
                }
                if ($datosOriginales['telefono'] !== $telefono) {
                    $cambios[] = "Teléfono: '{$datosOriginales['telefono']}' → '$telefono'";
                }
            }

            $descripcion = "Se editó el chofer ID: $id_chofer";
            $observacion = "";
            if (!empty($cambios)) {
                $observacion = "Cambios: " . implode(", ", $cambios);
            } else {
                $observacion = "No hubo cambios en los datos principales.";
            }

            registrarAuditoria(
                $tabla_afectada,         // modulo/tabla
                'editar',                // accion
                $descripcion,            // descripcion
                $id_usuario,             // id_usuario (quién ejecuta)
                $nombre_usuario,         // nombre_usuario (quién ejecuta)
                $tabla_afectada,         // tabla_afectada
                $id_chofer,              // id_registro_afectado
                $tipo_usuario,           // tipo_usuario (admin, supervisor, etc)
                $observacion             // observacion (cambios)
            );
            // =========================

            $_SESSION['choferUpdate'] = $dni;
            $stmt->close();
            header("Location: ../../Vista/Administrador/Adm_Gestion_Choferes.php");
            exit();
        } else {
            $_SESSION['error_dni'] = "Error al actualizar el conductor.";
            $stmt->close();
            header("Location: ../../Vista/Administrador/Adm_Editar_Chofer.php?IC=" . urlencode($id_chofer));
            exit();
        }

    } finally {
        $connMySQL->closeConnection();
    }

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