import { siteConfig } from "@/config/site";
import type { CartItem, Dish } from "./types";

export const CART_STORAGE_KEY = "kiln-cart-v1";

export function calculateCart(items: CartItem[], catalog: Dish[]) {
  const lines = items
    .map((item) => {
      const dish = catalog.find((candidate) => candidate.id === item.dishId);
      if (!dish) return null;
      return {
        ...item,
        dish,
        lineTotal: dish.price * item.quantity,
        priceSnapshot: item.priceSnapshot ?? dish.price,
        unavailable: dish.temporarilyUnavailable || !dish.deliveryAvailable || dish.alcohol || !dish.availableForDelivery || (dish.stockLeft !== null && dish.stockLeft !== undefined && item.quantity > dish.stockLeft),
        unavailableText: dish.unavailableText,
      };
    })
    .filter(Boolean);

  const subtotal = lines.reduce((sum, line) => sum + (line?.lineTotal ?? 0), 0);
  const delivery = subtotal >= siteConfig.order.freeDeliveryFrom || subtotal === 0 ? 0 : siteConfig.order.deliveryPrice;
  const minimum = siteConfig.order.minimumAmount;

  return {
    lines,
    subtotal,
    delivery,
    total: subtotal + delivery,
    minimum,
    belowMinimum: subtotal > 0 && subtotal < minimum
  };
}

export function formatPrice(value: number) {
  return new Intl.NumberFormat("ru-RU").format(value) + " ₽";
}
