package cart

import (
	"fmt"

	messages "git.tornberg.me/go-cart-actor/pkg/messages"
)

// mutation_remove_item.go
//
// Registers the RemoveItem mutation.
//
// Behavior:
//   - Removes the cart line whose local cart line Id == payload.Id
//   - If no such line exists returns an error
//   - Recalculates cart totals (WithTotals)
//
// Notes:
//   - This removes only the line item; any deliveries referencing the removed
//     item are NOT automatically adjusted (mirrors prior logic). If future
//     semantics require pruning delivery.item_ids you can extend this handler.
//   - If multiple lines somehow shared the same Id (should not happen), only
//     the first match would be removed—data integrity relies on unique line Ids.

func RemoveItem(g *CartGrain, m *messages.RemoveItem) error {
	if m == nil {
		return fmt.Errorf("RemoveItem: nil payload")
	}
	targetID := uint32(m.Id)

	index := -1
	for i, it := range g.Items {
		if it.Id == targetID {
			index = i
			break
		}
	}
	if index == -1 {
		return fmt.Errorf("RemoveItem: item id %d not found", m.Id)
	}

	g.Items = append(g.Items[:index], g.Items[index+1:]...)
	g.UpdateTotals()
	return nil
}
