package main

// mutation_set_cart_items.go
//
// Registers the SetCartRequest mutation. This mutation replaces the entire list
// of cart items with the provided list (each entry is an AddRequest).
//
// Behavior:
//   - Clears existing items (but leaves deliveries intact).
//   - Iterates over each AddRequest and delegates to CartGrain.AddItem
//     (which performs product lookup, creates AddItem mutation).
//   - If any single addition fails, the mutation aborts with an error;
//     items added prior to the failure remain (consistent with previous behavior).
//   - Totals recalculated after completion via WithTotals().
//
// Notes:
//   - Potential optimization: batch product lookups; currently sequential.
//   - Consider adding rollback semantics if atomic replacement is desired.
//   - Deliveries might reference item IDs that are now invalid—original logic
//     also left deliveries untouched. If that becomes an issue, add a cleanup
//     pass to remove deliveries whose item IDs no longer exist.

// func HandleSetCartRequest(g *CartGrain, m *messages.SetCartRequest) error {
// 	if m == nil {
// 		return fmt.Errorf("SetCartRequest: nil payload")
// 	}

// 	// Clear current items (keep deliveries)
// 	g.mu.Lock()
// 	g.Items = make([]*CartItem, 0, len(m.Items))
// 	g.mu.Unlock()

// 	for _, it := range m.Items {
// 		if it == nil {
// 			continue
// 		}
// 		if it.Sku == "" || it.Quantity < 1 {
// 			return fmt.Errorf("SetCartRequest: invalid item (sku='%s' qty=%d)", it.Sku, it.Quantity)
// 		}
// 		_, err := g.AddItem(it.Sku, int(it.Quantity), it.Country, it.StoreId)
// 		if err != nil {
// 			return fmt.Errorf("SetCartRequest: add sku '%s' failed: %w", it.Sku, err)
// 		}
// 	}
// 	return nil
// }
