<?php
session_start();

require_once '../../Controlador/Utilidades/Conexion_BD.php';
require_once '../../Controlador/Utilidades/Auditoria.php';

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $id_ruta = intval($_POST["id_ruta"]);
    $nombre_ruta = strtoupper(trim($_POST["nombre_ruta"]));
    $km_estimado = floatval($_POST["km_estimado"]);
    $descripcion = strtoupper(trim($_POST["descripcion"]));
    $enlace_mapa = trim($_POST["enlace_mapa"]);

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

    try {
        // Obtener datos originales
        $sqlOld = "SELECT nombre_ruta, km_estimado, descripcion, enlace_mapa FROM rutas WHERE id = ?";
        $stmtOld = $conexion->prepare($sqlOld);
        $stmtOld->bind_param("i", $id_ruta);
        $stmtOld->execute();
        $resOld = $stmtOld->get_result();
        $datosOriginales = $resOld->fetch_assoc();
        $stmtOld->close();

        // Actualizar ruta
        $sql = "UPDATE rutas SET nombre_ruta = ?, km_estimado = ?, descripcion = ?, enlace_mapa = ? WHERE id = ?";
        $stmt = $conexion->prepare($sql);
        $stmt->bind_param("sdssi", $nombre_ruta, $km_estimado, $descripcion, $enlace_mapa, $id_ruta);

        if ($stmt->execute()) {
            // Auditoría
            $id_usuario = $_SESSION['id_usuario'] ?? 0;
            $nombre_usuario = $_SESSION['nombre'] ?? $_SESSION['usuario'] ?? 'sistema';
            $tipo_usuario = $_SESSION['rol'] ?? '';
            $tabla_afectada = 'rutas';

            $cambios = [];
            if ($datosOriginales) {
                if ($datosOriginales['nombre_ruta'] !== $nombre_ruta) {
                    $cambios[] = "Nombre: '{$datosOriginales['nombre_ruta']}' → '$nombre_ruta'";
                }
                if (floatval($datosOriginales['km_estimado']) !== $km_estimado) {
                    $cambios[] = "Kilometraje: '{$datosOriginales['km_estimado']}' → '$km_estimado'";
                }
                if ($datosOriginales['descripcion'] !== $descripcion) {
                    $cambios[] = "Descripción: '{$datosOriginales['descripcion']}' → '$descripcion'";
                }
                if ($datosOriginales['enlace_mapa'] !== $enlace_mapa) {
                    $cambios[] = "Mapa: '{$datosOriginales['enlace_mapa']}' → '$enlace_mapa'";
                }
            }

            $descripcionAccion = "Se editó la ruta ID: $id_ruta";
            $observacion = $cambios ? "Cambios: " . implode(", ", $cambios) : "No hubo cambios relevantes.";

            registrarAuditoria(
                $tabla_afectada,
                'editar',
                $descripcionAccion,
                $id_usuario,
                $nombre_usuario,
                $tabla_afectada,
                $id_ruta,
                $tipo_usuario,
                $observacion
            );

            $_SESSION['rutaUpdate'] = $nombre_ruta;
            $stmt->close();
            header("Location: ../../Vista/Administrador/Adm_Gestion_Rutas.php");
            exit;
        } else {
            $_SESSION['error_editar_ruta'] = "Error al actualizar la ruta.";
            header("Location: ../../Vista/Administrador/Adm_Editar_Ruta.php?IDR=" . urlencode($id_ruta));
            exit;
        }
    } finally {
        $connMySQL->closeConnection();
    }

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