<?php
header('Content-Type: application/json');

$host = 'localhost';
$username = 'root';
$password = 'root';
$database = 'rastreo';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4", $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);
} catch (PDOException $e) {
    echo json_encode(['success' => false, 'msg' => "Error de conexión: " . $e->getMessage()]);
    exit;
}

$repartidor_id = $_POST['repartidor_id'] ?? null;
$auto_id       = $_POST['auto_id'] ?? null;
$pedidosJson   = $_POST['pedidos'] ?? null;

if (!$repartidor_id || !$auto_id || !$pedidosJson) {
    echo json_encode(['success' => false, 'msg' => 'Faltan datos (repartidor, auto o pedidos).']);
    exit;
}

$pedidos = json_decode($pedidosJson, true);
if (!is_array($pedidos) || empty($pedidos)) {
    echo json_encode(['success' => false, 'msg' => 'Formato de pedidos inválido.']);
    exit;
}

try {
    $pdo->beginTransaction();

    // Generar un id_ruta único para esta ruta
    $stmtMax = $pdo->query("SELECT IFNULL(MAX(id_ruta),0) AS max_id FROM rutas");
    $row = $stmtMax->fetch(PDO::FETCH_ASSOC);
    $id_ruta = $row['max_id'] + 1;

    // Preparar INSERT incluyendo el auto_id
    $stmt = $pdo->prepare("
        INSERT INTO rutas 
        (id_ruta, pedido_id, repartidor_id, auto_id, lat, lon, lat_alm, lon_alm, direccion, orden, stat_ped, stat_rep)
        VALUES 
        (:id_ruta, :pedido_id, :repartidor_id, :auto_id, :lat, :lon, :lat_alm, :lon_alm, :direccion, :orden, :stat_ped, :stat_rep)
    ");

    foreach ($pedidos as $p) {
        // 🔹 Compatibilidad con ambos formatos de JSON
        $pedido_id  = $p['pedido_id'] ?? $p['pedido'] ?? null;
        $direccion  = $p['direccion'] ?? '';

        // Si no hay dirección, se intenta construir con campos disponibles
        if (!$direccion) {
            $calle      = $p['calle'] ?? '';
            $colonia    = $p['colonia'] ?? '';
            $localidad  = $p['localidad'] ?? $p['municipio'] ?? '';
            $estado     = $p['estado'] ?? '';
            $pais       = $p['pais'] ?? '';
            $direccion  = trim("$calle, $colonia, $localidad, $estado, $pais");
        }

        $stmt->execute([
            ':id_ruta'       => $id_ruta,
            ':pedido_id'     => $pedido_id,
            ':repartidor_id' => $repartidor_id,
            ':auto_id'       => $auto_id,
            ':lat'           => $p['lat'] ?? null,
            ':lon'           => $p['lon'] ?? null,
            ':lat_alm'       => $p['lat_alm'] ?? null,
            ':lon_alm'       => $p['lon_alm'] ?? null,
            ':direccion'     => $direccion,
            ':orden'         => $p['orden'] ?? 0,
            ':stat_ped'      => 'N',
            ':stat_rep'      => 'O'
        ]);
    }

    $pdo->commit();
    echo json_encode(['success' => true, 'id_ruta' => $id_ruta]);

} catch (PDOException $e) {
    $pdo->rollBack();
    echo json_encode(['success' => false, 'msg' => "Error al guardar la ruta: " . $e->getMessage()]);
}
