import { cartReduce } from './reduce.js'
import type { CartStore } from './store.js'
import type { Cart, CartAction } from './types.js'

function emptyCart(cartId: string): Cart {
  return {
    id: cartId,
    currency: '',
    lines: [],
    subtotal: 0n,
  }
}

export async function applyToCart(
  store: CartStore,
  cartId: string,
  action: CartAction,
): Promise<Cart> {
  const loaded = await store.load(cartId)
  const current = loaded ?? emptyCart(cartId)
  const next = cartReduce(current, action)
  await store.save(next)
  return next
}
