<?php
if (!defined('BASEPATH')) {
    http_response_code(403);
    die(json_encode(["success" => false, "message" => "Acceso directo no permitido"]));
}

require_once('./connect_remota.php');

// Helper: obtener sucursal_id en remota (crear si no existe)
function getSucursalRemotaId($conn_remota, $nombre) {
    $nombreEsc = mysqli_real_escape_string($conn_remota, $nombre);
    $r = mysqli_query($conn_remota, "SELECT id FROM sucursales WHERE nombre = '$nombreEsc' AND activo = 1");
    if ($r && $row = mysqli_fetch_assoc($r)) {
        return (int)$row['id'];
    }
    // Crear
    mysqli_query($conn_remota, "INSERT INTO sucursales (nombre) VALUES ('$nombreEsc')");
    return (int)mysqli_insert_id($conn_remota);
}

// Helper: sync tabla simple (sin hijos) local → remota
function syncTablaSimple($conn, $conn_remota, $sucId, $tabla, $columnas) {
    $stats = ['subidas' => 0, 'actualizadas' => 0];
    $result = mysqli_query($conn, "SELECT * FROM $tabla");
    if (!$result) return $stats;

    while ($row = mysqli_fetch_assoc($result)) {
        $localId = (int)$row['id'];

        // Verificar si existe en remota
        $check = mysqli_query($conn_remota, "SELECT id FROM $tabla WHERE sucursal_id = $sucId AND local_id = $localId");
        if ($check && mysqli_num_rows($check) > 0) {
            // Actualizar
            $remRow = mysqli_fetch_assoc($check);
            $sets = [];
            foreach ($columnas as $col) {
                if (array_key_exists($col, $row)) {
                    if ($row[$col] === null) {
                        $sets[] = "$col = NULL";
                    } else {
                        $val = mysqli_real_escape_string($conn_remota, $row[$col]);
                        $sets[] = "$col = '$val'";
                    }
                }
            }
            if (!empty($sets)) {
                $setSql = implode(', ', $sets);
                mysqli_query($conn_remota, "UPDATE $tabla SET $setSql WHERE id = {$remRow['id']}");
                $stats['actualizadas']++;
            }
        } else {
            // Insertar
            $cols = ['sucursal_id', 'local_id'];
            $vals = [$sucId, $localId];
            foreach ($columnas as $col) {
                if (array_key_exists($col, $row)) {
                    $cols[] = $col;
                    if ($row[$col] === null) {
                        $vals[] = "NULL";
                    } else {
                        $vals[] = "'" . mysqli_real_escape_string($conn_remota, $row[$col]) . "'";
                    }
                }
            }
            $colsSql = implode(', ', $cols);
            $valsSql = implode(', ', $vals);
            mysqli_query($conn_remota, "INSERT INTO $tabla ($colsSql) VALUES ($valsSql)");
            $stats['subidas']++;
        }
    }
    return $stats;
}

// Helper: sync tabla con hijos local → remota
function syncTablaConHijos($conn, $conn_remota, $sucId, $tablaPadre, $colsPadre, $tablaHijos, $colsHijos, $fkPadre) {
    $stats = ['subidas' => 0, 'actualizadas' => 0];
    $result = mysqli_query($conn, "SELECT * FROM $tablaPadre");
    if (!$result) return $stats;

    // venta_id → venta_local_id (quitar _id y agregar _local_id)
    $fkLocalId = preg_replace('/_id$/', '_local_id', $fkPadre);

    while ($row = mysqli_fetch_assoc($result)) {
        $localId = (int)$row['id'];
        $remPadreId = 0;

        $check = mysqli_query($conn_remota, "SELECT id FROM $tablaPadre WHERE sucursal_id = $sucId AND local_id = $localId");
        if ($check && mysqli_num_rows($check) > 0) {
            $remRow = mysqli_fetch_assoc($check);
            $remPadreId = (int)$remRow['id'];
            $sets = [];
            foreach ($colsPadre as $col) {
                if (array_key_exists($col, $row)) {
                    if ($row[$col] === null) {
                        $sets[] = "$col = NULL";
                    } else {
                        $val = mysqli_real_escape_string($conn_remota, $row[$col]);
                        $sets[] = "$col = '$val'";
                    }
                }
            }
            if (!empty($sets)) {
                $setSql = implode(', ', $sets);
                mysqli_query($conn_remota, "UPDATE $tablaPadre SET $setSql WHERE id = $remPadreId");
                $stats['actualizadas']++;
            }
        } else {
            $cols = ['sucursal_id', 'local_id'];
            $vals = [$sucId, $localId];
            foreach ($colsPadre as $col) {
                if (array_key_exists($col, $row)) {
                    $cols[] = $col;
                    if ($row[$col] === null) {
                        $vals[] = "NULL";
                    } else {
                        $vals[] = "'" . mysqli_real_escape_string($conn_remota, $row[$col]) . "'";
                    }
                }
            }
            $colsSql = implode(', ', $cols);
            $valsSql = implode(', ', $vals);
            mysqli_query($conn_remota, "INSERT INTO $tablaPadre ($colsSql) VALUES ($valsSql)");
            $remPadreId = (int)mysqli_insert_id($conn_remota);
            $stats['subidas']++;
        }

        // Sync hijos
        if ($tablaHijos && $remPadreId > 0) {
            $hijos = mysqli_query($conn, "SELECT * FROM $tablaHijos WHERE $fkPadre = $localId");
            if ($hijos) {
                while ($hijo = mysqli_fetch_assoc($hijos)) {
                    $hijoLocalId = (int)$hijo['id'];
                    $checkH = mysqli_query($conn_remota, "SELECT id FROM $tablaHijos WHERE sucursal_id = $sucId AND local_id = $hijoLocalId");
                    if ($checkH && mysqli_num_rows($checkH) > 0) {
                        $remHRow = mysqli_fetch_assoc($checkH);
                        // Actualizar FK + datos
                        $setsH = ["$fkPadre = $remPadreId", "$fkLocalId = $localId"];
                        foreach ($colsHijos as $col) {
                            if (array_key_exists($col, $hijo) && $col !== $fkPadre) {
                                if ($hijo[$col] === null) {
                                    $setsH[] = "$col = NULL";
                                } else {
                                    $val = mysqli_real_escape_string($conn_remota, $hijo[$col]);
                                    $setsH[] = "$col = '$val'";
                                }
                            }
                        }
                        $setSqlH = implode(', ', $setsH);
                        mysqli_query($conn_remota, "UPDATE $tablaHijos SET $setSqlH WHERE id = {$remHRow['id']}");
                    } else {
                        $colsH = ['sucursal_id', 'local_id', $fkPadre, $fkLocalId];
                        $valsH = [$sucId, $hijoLocalId, $remPadreId, $localId];
                        foreach ($colsHijos as $col) {
                            if (array_key_exists($col, $hijo) && $col !== $fkPadre) {
                                $colsH[] = $col;
                                if ($hijo[$col] === null) {
                                    $valsH[] = "NULL";
                                } else {
                                    $valsH[] = "'" . mysqli_real_escape_string($conn_remota, $hijo[$col]) . "'";
                                }
                            }
                        }
                        $colsSqlH = implode(', ', $colsH);
                        $valsSqlH = implode(', ', $valsH);
                        mysqli_query($conn_remota, "INSERT INTO $tablaHijos ($colsSqlH) VALUES ($valsSqlH)");
                    }
                }
            }
        }
    }
    return $stats;
}

switch ($tipo) {

    case 'sincronizar':
        $conn_remota = getConexionRemota($conn);
        if (!$conn_remota) {
            sendResponse(false, "No se pudo conectar a la BD remota. Verifica la configuración.");
        }

        $sucursalLocal = getSucursalLocal($conn);
        if (empty($sucursalLocal)) {
            mysqli_close($conn_remota);
            sendResponse(false, "Configura el nombre de la sucursal antes de sincronizar.");
        }

        $sucId = getSucursalRemotaId($conn_remota, $sucursalLocal);
        $totalStats = ['subidas' => 0, 'actualizadas' => 0, 'bajadas' => 0];
        $errores = [];

        // ==========================================
        // 1) SUCURSALES
        // ==========================================
        $localSuc = mysqli_query($conn, "SELECT * FROM sucursales WHERE activo = 1");
        while ($localSuc && $row = mysqli_fetch_assoc($localSuc)) {
            $nombre = mysqli_real_escape_string($conn_remota, $row['nombre']);
            $dir = mysqli_real_escape_string($conn_remota, $row['direccion']);
            $tel = mysqli_real_escape_string($conn_remota, $row['telefono']);
            $check = mysqli_query($conn_remota, "SELECT id FROM sucursales WHERE nombre = '$nombre'");
            if ($check && mysqli_num_rows($check) === 0) {
                mysqli_query($conn_remota, "INSERT INTO sucursales (nombre, direccion, telefono) VALUES ('$nombre', '$dir', '$tel')");
            } else {
                $r = mysqli_fetch_assoc($check);
                mysqli_query($conn_remota, "UPDATE sucursales SET direccion = '$dir', telefono = '$tel' WHERE id = {$r['id']}");
            }
        }
        // Bajar sucursales remotas a local
        $remotaSuc = mysqli_query($conn_remota, "SELECT * FROM sucursales WHERE activo = 1");
        while ($remotaSuc && $row = mysqli_fetch_assoc($remotaSuc)) {
            $nombre = mysqli_real_escape_string($conn, $row['nombre']);
            $dir = mysqli_real_escape_string($conn, $row['direccion']);
            $tel = mysqli_real_escape_string($conn, $row['telefono']);
            $check = mysqli_query($conn, "SELECT id FROM sucursales WHERE nombre = '$nombre'");
            if ($check && mysqli_num_rows($check) === 0) {
                mysqli_query($conn, "INSERT INTO sucursales (nombre, direccion, telefono) VALUES ('$nombre', '$dir', '$tel')");
            }
        }

        // ==========================================
        // 2) CATÁLOGOS
        // ==========================================
        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'categorias_productos',
            ['nombre', 'descripcion', 'color', 'orden', 'activo', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'productos',
            ['nombre', 'descripcion', 'precio', 'categoria_id', 'unidad', 'stock', 'stock_minimo', 'codigo', 'imagen', 'activo', 'tiene_receta', 'envasado_origen', 'contabilizar_corte', 'contar_al_inicio', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'categorias_ingredientes',
            ['nombre', 'descripcion', 'activo', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'unidades_medida',
            ['nombre', 'abreviatura', 'activo', 'created_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'ingredientes',
            ['nombre', 'cantidad', 'unidad', 'precio', 'proveedor', 'stock_minimo', 'categoria', 'activo', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'clientes',
            ['nombre', 'telefono', 'email', 'direccion', 'activo', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 2b) RECETAS
        // ==========================================
        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'producto_ingredientes',
            ['producto_id', 'ingrediente_id', 'cantidad', 'unidad', 'created_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'producto_componentes',
            ['producto_id', 'componente_id', 'cantidad', 'unidad', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 2c) USUARIOS Y PERFILES
        // ==========================================
        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'permisos',
            ['codigo', 'nombre', 'descripcion', 'modulo', 'activo', 'created_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'perfiles',
            ['nombre', 'descripcion', 'activo', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'perfil_permisos',
            ['perfil_id', 'permiso_id', 'created_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'usuarios',
            ['username', 'password', 'nombre', 'email', 'telefono', 'perfil_id', 'activo', 'ultimo_acceso', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 2d) PEDIDOS PAUSADOS
        // ==========================================
        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'pedidos_pausados',
            ['cliente_id', 'items', 'total', 'notas', 'usuario_id', 'sucursal', 'caja', 'estado', 'created_at', 'updated_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 2e) TURNOS + inventario inicial
        // ==========================================
        $s = syncTablaConHijos($conn, $conn_remota, $sucId,
            'turnos', ['usuario_id', 'sucursal', 'caja', 'fondo_caja', 'fecha_inicio', 'fecha_fin', 'estado', 'corte_id', 'notas', 'created_at', 'updated_at'],
            'turno_inventario', ['producto_id', 'producto_nombre', 'stock_sistema', 'stock_fisico', 'diferencia', 'unidad', 'created_at'],
            'turno_id');
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 3) VENTAS + detalle
        // ==========================================
        $s = syncTablaConHijos($conn, $conn_remota, $sucId,
            'ventas', ['folio', 'subtotal', 'total', 'pago', 'cambio', 'metodo_pago', 'cliente_id', 'usuario_id', 'sucursal', 'caja', 'notas', 'estado', 'fecha', 'created_at', 'updated_at'],
            'venta_detalle', ['producto_id', 'producto_nombre', 'cantidad', 'precio_unitario', 'subtotal'],
            'venta_id');
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 4) COMPRAS + items
        // ==========================================
        $s = syncTablaConHijos($conn, $conn_remota, $sucId,
            'compras', ['proveedor', 'metodo_pago', 'total', 'observaciones', 'fecha', 'usuario_id', 'created_at', 'updated_at'],
            'compra_items', ['tipo_item', 'item_id', 'cantidad', 'unidad', 'precio_unitario', 'subtotal'],
            'compra_id');
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 5) PRODUCCIONES + ingredientes + componentes
        // ==========================================
        $s = syncTablaConHijos($conn, $conn_remota, $sucId,
            'producciones', ['producto_id', 'cantidad_producida', 'unidad', 'fecha', 'hora', 'usuario_id', 'notas', 'estado', 'created_at', 'updated_at'],
            'produccion_ingredientes', ['ingrediente_id', 'cantidad_usada', 'cantidad_receta', 'unidad', 'costo_unitario', 'created_at'],
            'produccion_id');
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // Componentes de producción (mismo padre)
        $prodResult = mysqli_query($conn, "SELECT * FROM producciones");
        if ($prodResult) {
            while ($prod = mysqli_fetch_assoc($prodResult)) {
                $prodLocalId = (int)$prod['id'];
                $checkProd = mysqli_query($conn_remota, "SELECT id FROM producciones WHERE sucursal_id = $sucId AND local_id = $prodLocalId");
                if ($checkProd && $remProd = mysqli_fetch_assoc($checkProd)) {
                    $remProdId = (int)$remProd['id'];
                    $comps = mysqli_query($conn, "SELECT * FROM produccion_componentes WHERE produccion_id = $prodLocalId");
                    while ($comps && $comp = mysqli_fetch_assoc($comps)) {
                        $compLocalId = (int)$comp['id'];
                        $checkC = mysqli_query($conn_remota, "SELECT id FROM produccion_componentes WHERE sucursal_id = $sucId AND local_id = $compLocalId");
                        if (!$checkC || mysqli_num_rows($checkC) === 0) {
                            $compId = (int)$comp['componente_id'];
                            $cantU = (float)$comp['cantidad_usada'];
                            $cantR = isset($comp['cantidad_receta']) ? (float)$comp['cantidad_receta'] : 0;
                            $uni = mysqli_real_escape_string($conn_remota, $comp['unidad']);
                            $costoU = (float)$comp['costo_unitario'];
                            $cAt = mysqli_real_escape_string($conn_remota, $comp['created_at']);
                            mysqli_query($conn_remota, "INSERT INTO produccion_componentes (sucursal_id, local_id, produccion_id, produccion_local_id, componente_id, cantidad_usada, cantidad_receta, unidad, costo_unitario, created_at) VALUES ($sucId, $compLocalId, $remProdId, $prodLocalId, $compId, $cantU, $cantR, '$uni', $costoU, '$cAt')");
                        }
                    }
                }
            }
        }

        // Ajustes de producción
        $ajResult = mysqli_query($conn, "SELECT * FROM produccion_ajustes");
        if ($ajResult) {
            while ($aj = mysqli_fetch_assoc($ajResult)) {
                $ajLocalId = (int)$aj['id'];
                $ajProdLocalId = (int)$aj['produccion_id'];
                $checkAj = mysqli_query($conn_remota, "SELECT id FROM produccion_ajustes WHERE sucursal_id = $sucId AND local_id = $ajLocalId");

                // Buscar produccion remota
                $checkProd = mysqli_query($conn_remota, "SELECT id FROM producciones WHERE sucursal_id = $sucId AND local_id = $ajProdLocalId");
                $remProdId = ($checkProd && $rp = mysqli_fetch_assoc($checkProd)) ? (int)$rp['id'] : 0;

                if (!$checkAj || mysqli_num_rows($checkAj) === 0) {
                    $pi = (float)$aj['peso_inicial'];
                    $pf = (float)$aj['peso_final'];
                    $dif = (float)$aj['diferencia'];
                    $notas = mysqli_real_escape_string($conn_remota, $aj['notas']);
                    $uid = (int)$aj['usuario_id'];
                    $fecha = mysqli_real_escape_string($conn_remota, $aj['fecha']);
                    $hora = mysqli_real_escape_string($conn_remota, $aj['hora']);
                    $cAt = mysqli_real_escape_string($conn_remota, $aj['created_at']);

                    mysqli_query($conn_remota, "INSERT INTO produccion_ajustes (sucursal_id, local_id, produccion_id, produccion_local_id, peso_inicial, peso_final, diferencia, notas, usuario_id, fecha, hora, created_at) VALUES ($sucId, $ajLocalId, $remProdId, $ajProdLocalId, $pi, $pf, $dif, '$notas', $uid, '$fecha', '$hora', '$cAt')");
                    $remAjId = mysqli_insert_id($conn_remota);

                    // Items del ajuste
                    $ajItems = mysqli_query($conn, "SELECT * FROM produccion_ajuste_items WHERE ajuste_id = $ajLocalId");
                    while ($ajItems && $aji = mysqli_fetch_assoc($ajItems)) {
                        $ajiLocalId = (int)$aji['id'];
                        $tipoAji = mysqli_real_escape_string($conn_remota, $aji['tipo']);
                        $itemIdAji = (int)$aji['item_id'];
                        $cantAji = (float)$aji['cantidad'];
                        $uniAji = mysqli_real_escape_string($conn_remota, $aji['unidad']);
                        mysqli_query($conn_remota, "INSERT INTO produccion_ajuste_items (sucursal_id, local_id, ajuste_id, ajuste_local_id, tipo, item_id, cantidad, unidad) VALUES ($sucId, $ajiLocalId, $remAjId, $ajLocalId, '$tipoAji', $itemIdAji, $cantAji, '$uniAji')");
                    }
                }
            }
        }

        // ==========================================
        // 6) MERMAS
        // ==========================================
        $s = syncTablaSimple($conn, $conn_remota, $sucId, 'mermas',
            ['tipo_item', 'item_id', 'cantidad', 'unidad', 'motivo', 'observaciones', 'fecha', 'usuario_id', 'created_at']);
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 7) CORTES DE CAJA + inventario
        // ==========================================
        $s = syncTablaConHijos($conn, $conn_remota, $sucId,
            'cortes_caja', ['usuario_id', 'sucursal', 'caja', 'fecha_inicio', 'fecha_fin', 'ventas_efectivo', 'ventas_tarjeta', 'ventas_total', 'num_ventas', 'efectivo_sistema', 'efectivo_fisico', 'diferencia', 'fondo_caja', 'detalle_arqueo', 'notas', 'created_at'],
            'inventario_cortes', ['producto_id', 'producto_nombre', 'stock_esperado', 'stock_fisico', 'diferencia', 'unidad'],
            'corte_id');
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // ==========================================
        // 8) TRANSFERENCIAS + items (bidireccional)
        // ==========================================
        // Subir local → remota
        $s = syncTablaConHijos($conn, $conn_remota, $sucId,
            'transferencias', ['tipo', 'sucursal_origen_id', 'sucursal_origen_nombre', 'sucursal_destino_id', 'sucursal_destino_nombre', 'estado', 'observaciones', 'fecha', 'solicitado_por', 'aprobado_por', 'enviado_por', 'recibido_por', 'fecha_aprobacion', 'fecha_envio', 'fecha_recepcion', 'created_at', 'updated_at'],
            'transferencia_items', ['tipo_item', 'item_id', 'item_nombre', 'cantidad_solicitada', 'cantidad_enviada', 'cantidad_recibida', 'unidad', 'created_at'],
            'transferencia_id');
        $totalStats['subidas'] += $s['subidas'];
        $totalStats['actualizadas'] += $s['actualizadas'];

        // Bajar remota → local (transferencias que involucran a esta sucursal pero fueron creadas por otra)
        $sucEsc = mysqli_real_escape_string($conn_remota, $sucursalLocal);
        $remotaTrans = mysqli_query($conn_remota, "SELECT * FROM transferencias WHERE sucursal_id != $sucId AND (sucursal_origen_nombre = '$sucEsc' OR sucursal_destino_nombre = '$sucEsc') ORDER BY id ASC");

        while ($remotaTrans && $rt = mysqli_fetch_assoc($remotaTrans)) {
            $remoteLocalId = (int)$rt['local_id'];
            $remoteSucId = (int)$rt['sucursal_id'];
            $origen = mysqli_real_escape_string($conn, $rt['sucursal_origen_nombre']);
            $destino = mysqli_real_escape_string($conn, $rt['sucursal_destino_nombre']);
            $created = mysqli_real_escape_string($conn, $rt['created_at']);

            // Buscar por clave natural en local
            $checkLocal = mysqli_query($conn, "SELECT id, estado FROM transferencias WHERE sucursal_origen_nombre = '$origen' AND sucursal_destino_nombre = '$destino' AND created_at = '$created'");

            if ($checkLocal && mysqli_num_rows($checkLocal) > 0) {
                // Ya existe - actualizar estado
                $localRow = mysqli_fetch_assoc($checkLocal);
                $localExistId = (int)$localRow['id'];
                if ($localRow['estado'] !== $rt['estado']) {
                    $estado = mysqli_real_escape_string($conn, $rt['estado']);
                    $fa = $rt['fecha_aprobacion'] ? "'" . mysqli_real_escape_string($conn, $rt['fecha_aprobacion']) . "'" : "NULL";
                    $fe = $rt['fecha_envio'] ? "'" . mysqli_real_escape_string($conn, $rt['fecha_envio']) . "'" : "NULL";
                    $fr = $rt['fecha_recepcion'] ? "'" . mysqli_real_escape_string($conn, $rt['fecha_recepcion']) . "'" : "NULL";
                    mysqli_query($conn, "UPDATE transferencias SET estado = '$estado', fecha_aprobacion = $fa, fecha_envio = $fe, fecha_recepcion = $fr, updated_at = NOW() WHERE id = $localExistId");
                    $totalStats['actualizadas']++;
                }
                // Actualizar items
                $remItems = mysqli_query($conn_remota, "SELECT * FROM transferencia_items WHERE transferencia_id = {$rt['id']}");
                while ($remItems && $ri = mysqli_fetch_assoc($remItems)) {
                    $itemNombre = mysqli_real_escape_string($conn, $ri['item_nombre']);
                    $tipoItem = mysqli_real_escape_string($conn, $ri['tipo_item']);
                    $cantEnv = (float)$ri['cantidad_enviada'];
                    $cantRec = (float)$ri['cantidad_recibida'];
                    $checkLI = mysqli_query($conn, "SELECT id FROM transferencia_items WHERE transferencia_id = $localExistId AND item_nombre = '$itemNombre' AND tipo_item = '$tipoItem'");
                    if ($checkLI && mysqli_num_rows($checkLI) > 0) {
                        $liRow = mysqli_fetch_assoc($checkLI);
                        mysqli_query($conn, "UPDATE transferencia_items SET cantidad_enviada = $cantEnv, cantidad_recibida = $cantRec WHERE id = {$liRow['id']}");
                    }
                }
            } else {
                // No existe - insertar en local
                $tipoT = mysqli_real_escape_string($conn, $rt['tipo']);
                $estado = mysqli_real_escape_string($conn, $rt['estado']);
                $obs = mysqli_real_escape_string($conn, $rt['observaciones']);
                $fecha = mysqli_real_escape_string($conn, $rt['fecha']);
                $origenId = (int)$rt['sucursal_origen_id'];
                $destinoId = (int)$rt['sucursal_destino_id'];
                $sol = $rt['solicitado_por'] ? (int)$rt['solicitado_por'] : "NULL";
                $apr = $rt['aprobado_por'] ? (int)$rt['aprobado_por'] : "NULL";
                $env = $rt['enviado_por'] ? (int)$rt['enviado_por'] : "NULL";
                $rec = $rt['recibido_por'] ? (int)$rt['recibido_por'] : "NULL";
                $fa = $rt['fecha_aprobacion'] ? "'" . mysqli_real_escape_string($conn, $rt['fecha_aprobacion']) . "'" : "NULL";
                $fe = $rt['fecha_envio'] ? "'" . mysqli_real_escape_string($conn, $rt['fecha_envio']) . "'" : "NULL";
                $fr = $rt['fecha_recepcion'] ? "'" . mysqli_real_escape_string($conn, $rt['fecha_recepcion']) . "'" : "NULL";

                $insertSql = "INSERT INTO transferencias (tipo, sucursal_origen_id, sucursal_origen_nombre, sucursal_destino_id, sucursal_destino_nombre, estado, observaciones, fecha, solicitado_por, aprobado_por, enviado_por, recibido_por, fecha_aprobacion, fecha_envio, fecha_recepcion, created_at)
                    VALUES ('$tipoT', $origenId, '$origen', $destinoId, '$destino', '$estado', '$obs', '$fecha', $sol, $apr, $env, $rec, $fa, $fe, $fr, '$created')";

                if (mysqli_query($conn, $insertSql)) {
                    $newLocalId = mysqli_insert_id($conn);
                    $totalStats['bajadas']++;

                    $remItems = mysqli_query($conn_remota, "SELECT * FROM transferencia_items WHERE transferencia_id = {$rt['id']}");
                    while ($remItems && $ri = mysqli_fetch_assoc($remItems)) {
                        $tipoItem = mysqli_real_escape_string($conn, $ri['tipo_item']);
                        $itemId = (int)$ri['item_id'];
                        $itemNombre = mysqli_real_escape_string($conn, $ri['item_nombre']);
                        $cantSol = (float)$ri['cantidad_solicitada'];
                        $cantEnv = (float)$ri['cantidad_enviada'];
                        $cantRec = (float)$ri['cantidad_recibida'];
                        $unidad = mysqli_real_escape_string($conn, $ri['unidad']);
                        mysqli_query($conn, "INSERT INTO transferencia_items (transferencia_id, tipo_item, item_id, item_nombre, cantidad_solicitada, cantidad_enviada, cantidad_recibida, unidad) VALUES ($newLocalId, '$tipoItem', $itemId, '$itemNombre', $cantSol, $cantEnv, $cantRec, '$unidad')");
                    }
                }
            }
        }

        mysqli_close($conn_remota);

        $mensaje = "Sync completado. Subidas: {$totalStats['subidas']}, Bajadas: {$totalStats['bajadas']}, Actualizadas: {$totalStats['actualizadas']}";
        sendResponse(true, $mensaje, ['stats' => $totalStats]);
        break;

    case 'estadoSync':
        $conn_remota = getConexionRemota($conn);
        $conectada = $conn_remota ? true : false;
        if ($conn_remota) mysqli_close($conn_remota);

        $cfgResult = mysqli_query($conn, "SELECT db_remota_activa, db_remota_host FROM configuracion WHERE id = 1");
        $cfg = $cfgResult ? mysqli_fetch_assoc($cfgResult) : null;

        sendResponse(true, "Estado obtenido", [
            'activa' => $cfg ? (bool)$cfg['db_remota_activa'] : false,
            'host' => $cfg ? $cfg['db_remota_host'] : '',
            'conectada' => $conectada
        ]);
        break;

    default:
        sendResponse(false, "Operación no válida en Sync");
        break;
}
