import style from './cart.module.css';

import React, { useEffect, useMemo, useState } from 'react';
import Link from 'next/link';
import { Button, Checkbox, Toast, Tooltip } from '@chakra-ui/react';
import { toast } from 'react-hot-toast';
import { useRouter } from 'next/router';
import { getAuth } from '~/libs/auth';
import { useCartStore } from '~/modules/cart/stores/useCartStore';

import CartItem from '~/modules/cart/components/Item';
import CartSummary from '~/modules/cart/components/Summary';
import clsxm from '~/libs/clsxm';
import useDevice from '@/core/hooks/useDevice';
import CartSummaryMobile from '~/modules/cart/components/CartSummaryMobile';
import Image from '~/components/ui/image';

const CartPage = () => {
  const router = useRouter();
  const auth = getAuth();
  const [isStepApproval, setIsStepApproval] = React.useState(false);
  const [isSelectedAll, setIsSelectedAll] = useState<boolean>(false);
  const [isButtonChek, setIsButtonChek] = useState<boolean>(false);
  const [buttonSelectNow, setButtonSelectNow] = useState<boolean>(true);

  const { loadCart, cart, summary } = useCartStore();

  const useDivvice = useDevice();

  useEffect(() => {
    if (typeof auth === 'object' && !cart) {
      loadCart(auth.id);
      setIsStepApproval(auth?.feature?.soApproval);
    }
  }, [auth, loadCart, cart, isButtonChek, ]);
  
  
  const hasSelectedPromo = useMemo(() => {
    if (!cart) return false;
    for (const item of cart.products) {
      if (item.cart_type === 'promotion' && item.selected) return true;
    }
    return false;
  }, [cart]);

  const hasSelected = useMemo(() => {
    if (!cart) return false;
    for (const item of cart.products) {
      if (item.selected) return true;
    }
    return false;
  }, [cart]);

  const hasSelectNoPrice = useMemo(() => {
    if (!cart) return false;
    for (const item of cart.products) {
      if (item.selected && item.price.price_discount == 0) return true;
    }
    return false;
  }, [cart]);
  
  const handleCheckout = (()=>{
      router.push('/shop/checkout');
  })

  const handleQuotation = (()=>{
    if(hasSelectedPromo || !hasSelected){
      toast.error('Maaf, Barang promo tidak dapat dibuat quotation');
    }else{
      router.push('/shop/quotation');
    }
  })

  const handleChange = (()=>{
    setButtonSelectNow(!buttonSelectNow)
    setIsSelectedAll(!isSelectedAll)
    setIsButtonChek(!isButtonChek)
  })

  return (
    <>
      <div className={style['title']}>Keranjang Belanja</div>
      <div className='h-2' />
        <div className='flex items-center object-center mt-2'>
          <Checkbox
            borderColor='gray.600'
            colorScheme='red'
            size='lg'
            isChecked={isButtonChek}
            onChange={handleChange}
          /> <p className='p-2 text-caption-2'>
              {buttonSelectNow? "Select all" : "Unchek all" } 
            </p> 
        </div>

      <div className={style['content']}>
        <div className={style['item-wrapper']}>
          <div className={style['item-skeleton']}>
            {!cart && <CartItem.Skeleton count={5} height='120px' />}
          </div>

          <div className={style['items']}>
            {cart?.products.map((item) => (
              <CartItem key={item.id} item={item} pilihSemuaCart={isSelectedAll}  />
            ))}
            

            {cart?.products?.length === 0 && (
              <div className='flex flex-col items-center'>
                <Image
                  src='/images/empty_cart.svg'
                  alt='Empty Cart'
                  width={450}
                  height={450}
                />
                <div className='text-title-sm md:text-title-lg text-center font-semibold'>
                  Keranjangnya masih kosong nih
                </div>
                <div className='text-body-2 md:text-body-1 text-center mt-3'>
                  Yuk, tambahin barang-barang yang kamu mau ke keranjang
                  sekarang!
                  <br />
                  Ada banyak potongan belanjanya pakai kode voucher
                </div>
                <Link
                  href='/'
                  className='btn-solid-red rounded-full text-body-1 mt-6'
                >
                  Mulai Belanja
                </Link>
              </div>
            )}
          </div>
        </div>
        <div
          className={`${style['summary-wrapper']} ${
            useDivvice.isMobile && cart?.product_total === 0 ? 'hidden' : ''
          }`}
        >
          <div className={style['summary']}>
            {useDivvice.isMobile && (
              <CartSummaryMobile {...summary} isLoaded={!!cart} />
            )}
            {!useDivvice.isMobile && (
              <CartSummary {...summary} isLoaded={!!cart} />
            )}

            <div className={isStepApproval ? style['summary-buttons-step-approval'] : style['summary-buttons']  }>
              <Tooltip
                label={
                  hasSelectedPromo &&
                  'Barang promo tidak dapat dibuat quotation'
                }
              >
                <Button
                  colorScheme='yellow'
                  w='full'
                  isDisabled={hasSelectedPromo || !hasSelected}
                  onClick={handleQuotation}
                >
                  Quotation
                </Button>
              </Tooltip>
              {!isStepApproval && (
                <Tooltip
                  label={clsxm({
                    'Tidak ada item yang dipilih': !hasSelected,
                    'Terdapat item yang tidak ada harga': hasSelectNoPrice,
                  })}
                >
                  <Button
                    colorScheme='red'
                    w='full'
                    isDisabled={!hasSelected || hasSelectNoPrice}
                    onClick={handleCheckout}
                  >
                    Checkout
                  </Button>
                </Tooltip>
              )}
            </div>
          </div>
        </div>
      </div>
    </>
  );
};

export default CartPage;
