'use client'; import React from 'react'; import Link from 'next/link'; import { useParams, useRouter, usePathname } from 'next/navigation'; import Button from '@/components/button/PrimaryButton'; import { useGetFoods } from '@/app/[name]/(Main)/hooks/useMenuData'; import type { Food } from '@/app/[name]/(Main)/types/Types'; import { useCart } from '../hook/useCart'; import { useTranslation } from 'react-i18next'; import { useGetProfile } from '@/app/[name]/(Profile)/profile/hooks/userProfileData'; import { useGetCartItems } from '../hooks/useCartData'; import { useCartStore } from '../store/Store'; interface CartSummaryProps { isPremium: boolean; } const CartSummary = ({ isPremium }: CartSummaryProps) => { const params = useParams(); const router = useRouter(); const pathname = usePathname(); const name = params.name as string; const { isSuccess } = useGetProfile(); const { data: foodsResponse } = useGetFoods(); const foods = React.useMemo(() => foodsResponse?.data ?? [], [foodsResponse?.data]); const { items } = useCart(); const { data: cartData } = useGetCartItems(isSuccess); const { t } = useTranslation('parallels', { keyPrefix: 'Cart' }); const { description, setDescription } = useCartStore(); const cartFoods = React.useMemo(() => { if (!foods.length) return []; return Object.entries(items) .filter(([, detail]) => detail?.quantity && detail.quantity > 0) .map(([id]) => foods.find((foodItem) => String(foodItem.id) === String(id)) ) .filter((food): food is Food => Boolean(food)); }, [foods, items]); const totalPrice = React.useMemo(() => { // اگر داده از API آمده و total وجود دارد، از آن استفاده می‌کنیم if (isSuccess && cartData?.data?.total !== undefined) { return cartData.data.total; } // در غیر این صورت، محاسبه محلی با در نظر گرفتن تخفیف return cartFoods.reduce((sum, food) => { const qty = items[String(food.id)]?.quantity ?? 0; const basePrice = food.price ?? 0; const discount = food.discount ?? 0; const priceAfterDiscount = basePrice * (1 - discount / 100); return sum + priceAfterDiscount * qty; }, 0); }, [cartFoods, items, isSuccess, cartData?.data?.total]); const isCartEmpty = cartFoods.length === 0; const formatPrice = React.useCallback( (value: number) => value.toLocaleString('fa-IR'), [] ); return ( <> {!isCartEmpty && ( <> {isPremium && (

{t('InputDescription.Label')}

)}
{t('PayableAmountLabel')}
{ isPremium &&
{formatPrice(totalPrice)} تومان
}
{isPremium && ( { if (!isSuccess) { event.preventDefault(); const redirectUrl = encodeURIComponent(pathname); router.replace(`/${name}/auth?redirect=${redirectUrl}`); return; } }} > )} {!isPremium && (
{formatPrice(totalPrice)} تومان
)}
)} {/* {!isCartEmpty && (
{t('CartControlsHint', { defaultValue: 'برای ویرایش تعداد، از دکمه‌های هر آیتم استفاده کنید.' })}
)} */} ); }; export default CartSummary;