import { useOrderOverwrite } from '@composables/orders/useOrderOverwrite'; export function useOrderSync() { const cartStore = useCartStore(); const userStore = useUserStore(); const { $appHelpers } = useNuxtApp(); const { overwriteOrder } = useOrderOverwrite(); const isAuthenticated = computed(() => userStore.isAuthenticated); const orderUuid = computed(() => cartStore.currentOrder?.uuid); const cookieCart = useCookie($appHelpers.COOKIES_CART_KEY, { default: () => [], path: '/', }); async function syncOrder() { if (!isAuthenticated.value || !orderUuid.value) { return; } const cookieCartItems = cookieCart.value || []; if (cookieCartItems.length === 0) { return; } const apiCartProducts = cartStore.currentOrder?.orderProducts?.edges || []; const apiProductMap = new Map( apiCartProducts.map((e) => [ e.node.product.uuid, e.node.quantity, ]), ); const productsToSync = []; for (const cartItem of cookieCartItems) { const apiQuantity = apiProductMap.get(cartItem.productUuid) || 0; const quantityDifference = cartItem.quantity - apiQuantity; if (quantityDifference > 0) { for (let i = 0; i < quantityDifference; i++) { productsToSync.push({ uuid: cartItem.productUuid, }); } } } if (productsToSync.length === 0) { cookieCart.value = []; return; } try { await overwriteOrder({ type: 'bulk', bulkAction: 'add', isBulkSync: true, products: productsToSync, }); } catch (err) { console.error('Failed to sync cart:', err); } } return { syncOrder, }; }