<?php
session_start();
require_once '../../Controlador/Utilidades/Conexion_BD.php';
require_once '../../Controlador/Utilidades/Auditoria.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // ==========================
    // Captura y sanitización de datos del formulario
    // ==========================
    $id_vehiculo = intval($_POST["id_vehiculo"]);
    $placa = strtoupper(trim($_POST["placa"]));
    $ano_fabricacion = intval($_POST["ano_fabricacion"]);
    $marca = strtoupper(trim($_POST["marca"]));
    $modelo = strtoupper(trim($_POST["modelo"]));
    $tipo_vehiculo = intval($_POST["tipo_vehiculo_id"]);
    $tipo_combustible = intval($_POST["tipo_combustible_id"]);

    // Asegurar que el valor decimal se interpreta correctamente incluso si viene con coma
    $capacidad_raw = trim($_POST["capacidad_combustible"]);
    $capacidad_raw = str_replace(',', '.', $capacidad_raw);
    $capacidad_combustible = floatval($capacidad_raw);

    // Solo si el rol es administrador se permite modificar el KM inicial
    $kilometraje_inicial = null;
    if (isset($_SESSION['rol']) && $_SESSION['rol'] === 'administrador') {
        $kilometraje_inicial = isset($_POST["kilometraje_inicial"]) ? intval($_POST["kilometraje_inicial"]) : null;
    }

    // ==========================
    // Conexión a la base de datos
    // ==========================
    $connMySQL = new Conexion_BD();
    $conexion = $connMySQL->getConnection();

    // ==========================
    // Validación: placa duplicada (en otro vehículo)
    // ==========================
    $sqlVerificar = "SELECT COUNT(*) AS total FROM vehiculos WHERE placa = ? AND id != ?";
    $stmtVerificar = $conexion->prepare($sqlVerificar);
    $stmtVerificar->bind_param("si", $placa, $id_vehiculo);
    $stmtVerificar->execute();
    $resultado = $stmtVerificar->get_result();
    $fila = $resultado->fetch_assoc();
    $stmtVerificar->close();

    if ($fila['total'] > 0) {
        $_SESSION['error_placa'] = "La placa \"$placa\" ya está registrada por otro vehículo.";
        $connMySQL->closeConnection();
        header("Location: ../../Vista/Administrador/Adm_Editar_Vehiculo.php?IV=" . urlencode($id_vehiculo));
        exit();
    }

    // ==========================
    // Obtener datos originales antes de actualizar
    // ==========================
    $sqlOrig = "SELECT placa, ano_fabricacion, marca, modelo, tipo_vehiculo_id, tipo_combustible_id, capacidad_combustible, kilometraje_inicial FROM vehiculos WHERE id = ?";
    $stmtOrig = $conexion->prepare($sqlOrig);
    $stmtOrig->bind_param("i", $id_vehiculo);
    $stmtOrig->execute();
    $resOrig = $stmtOrig->get_result();
    $original = $resOrig->fetch_assoc();
    $stmtOrig->close();

    // ==========================
    // Actualización del vehículo
    // ==========================
    if ($kilometraje_inicial !== null) {
        $sql = "UPDATE vehiculos 
                SET placa=?, ano_fabricacion=?, marca=?, modelo=?, tipo_vehiculo_id=?, tipo_combustible_id=?, capacidad_combustible=?, kilometraje_inicial=? 
                WHERE id=?";
        $stmt = $conexion->prepare($sql);
        $stmt->bind_param(
            "sissiiddi",
            $placa,
            $ano_fabricacion,
            $marca,
            $modelo,
            $tipo_vehiculo,
            $tipo_combustible,
            $capacidad_combustible,
            $kilometraje_inicial,
            $id_vehiculo
        );
    } else {
        $sql = "UPDATE vehiculos 
                SET placa=?, ano_fabricacion=?, marca=?, modelo=?, tipo_vehiculo_id=?, tipo_combustible_id=?, capacidad_combustible=? 
                WHERE id=?";
        $stmt = $conexion->prepare($sql);
        $stmt->bind_param(
            "sissiiid",
            $placa,
            $ano_fabricacion,
            $marca,
            $modelo,
            $tipo_vehiculo,
            $tipo_combustible,
            $capacidad_combustible,
            $id_vehiculo
        );
    }

    if ($stmt->execute()) {
        // ======= AUDITORÍA DETALLADA =======
        $camposCambiados = [];
        if ($original['placa'] != $placa) {
            $camposCambiados[] = "placa: [{$original['placa']} → $placa]";
        }
        if ($original['ano_fabricacion'] != $ano_fabricacion) {
            $camposCambiados[] = "año: [{$original['ano_fabricacion']} → $ano_fabricacion]";
        }
        if ($original['marca'] != $marca) {
            $camposCambiados[] = "marca: [{$original['marca']} → $marca]";
        }
        if ($original['modelo'] != $modelo) {
            $camposCambiados[] = "modelo: [{$original['modelo']} → $modelo]";
        }
        if ($original['tipo_vehiculo_id'] != $tipo_vehiculo) {
            $camposCambiados[] = "tipo_vehiculo_id: [{$original['tipo_vehiculo_id']} → $tipo_vehiculo]";
        }
        if ($original['tipo_combustible_id'] != $tipo_combustible) {
            $camposCambiados[] = "tipo_combustible_id: [{$original['tipo_combustible_id']} → $tipo_combustible]";
        }
        if (round($original['capacidad_combustible'], 2) != round($capacidad_combustible, 2)) {
            $camposCambiados[] = "capacidad_combustible: [{$original['capacidad_combustible']} → $capacidad_combustible]";
        }
        if (isset($original['kilometraje_inicial']) && $kilometraje_inicial !== null && $original['kilometraje_inicial'] != $kilometraje_inicial) {
            $camposCambiados[] = "kilometraje_inicial: [{$original['kilometraje_inicial']} → $kilometraje_inicial]";
        }

        if (count($camposCambiados) > 0) {
            $id_usuario = $_SESSION['id_usuario'] ?? 0;
            $nombre_usuario = $_SESSION['usuario'] ?? 'sistema';
            $tipo_usuario = $_SESSION['rol'] ?? '';
            $descripcion = "Se editó el vehículo ID: $id_vehiculo, placa: $placa | " . implode(' | ', $camposCambiados);
            registrarAuditoria(
                'vehiculos',
                'editar',
                $descripcion,
                $id_usuario,
                $nombre_usuario,
                'vehiculos',
                $id_vehiculo,
                $tipo_usuario
            );
        }

        $_SESSION['vehiculoUpdate'] = $placa;
        $stmt->close();
        $connMySQL->closeConnection();
        header("Location: ../../Vista/Administrador/Adm_Gestion_Vehicular.php");
        exit();
    } else {
        $_SESSION['error_placa'] = "Error al actualizar el vehículo.";
        $stmt->close();
        $connMySQL->closeConnection();
        header("Location: ../../Vista/Administrador/Adm_Editar_Vehiculo.php?IV=" . urlencode($id_vehiculo));
        exit();
    }

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