'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';

const CartSummary = () => {
  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 (
    <>
      <div className='mt-2'>
        <div className='relative'>
          <h3 className='text-sm'>{t('InputDescription.Label')}</h3>
          <textarea
            className='w-full px-4 py-2.5 mt-4 text-sm2 leading-6 outline-0 border border-border rounded-normal resize-none focus:ring-0'
            placeholder={t('InputDescription.Placeholder')}
            id='description'
            name='description'
            value={description}
            onChange={(e) => setDescription(e.target.value)}
          ></textarea>
          <span className='absolute top-4 right-2 px-2 bg-background text-foreground text-xs'></span>
        </div>
      </div>

      <div
        className={`fixed bottom-0 left-0 right-0 z-50 bg-white border-t border-border p-4 w-full ${isCartEmpty ? 'pointer-events-none opacity-60' : ''}`}
      >
        <div className='flex justify-between items-center gap-4'>

          <div className='flex flex-col'>
            <div className='text-xs text-gray-400'>{t('PayableAmountLabel')}</div>
            <div className='text-sm mt-2 font-semibold'>{formatPrice(totalPrice)} تومان</div>
          </div>

          <Link
            href={'order/checkout/0'}
            onClick={(event) => {
              if (isCartEmpty) {
                event.preventDefault();
                return;
              }
              if (!isSuccess) {
                event.preventDefault();
                const redirectUrl = encodeURIComponent(pathname);
                router.push(`/${name}/auth?redirect=${redirectUrl}`);
                return;
              }
            }}
          >
            <Button className='w-fit! px-10' disabled={isCartEmpty}>{t('ButtonCheckout')}</Button>
          </Link>

        </div>
      </div>

      {/* {!isCartEmpty && (
        <div className='flex items-center justify-between rounded-xl border border-border px-4 py-3 text-xs text-muted-foreground'>
          <span>{t('CartControlsHint', { defaultValue: 'برای ویرایش تعداد، از دکمه‌های هر آیتم استفاده کنید.' })}</span>
          <div className='flex items-center gap-1 text-foreground'>
            <Add size={16} />
            <Minus size={16} />
          </div>
        </div>
      )} */}
    </>
  );
};

export default CartSummary;

