import Badge from '@/core/components/elements/Badge/Badge'
import Divider from '@/core/components/elements/Divider/Divider'
import Image from '@/core/components/elements/Image/Image'
import Link from '@/core/components/elements/Link/Link'
import currencyFormat from '@/core/utils/currencyFormat'
import { useEffect, useState } from 'react'
import Select from 'react-select'
import ProductSimilar from './ProductSimilar'
import LazyLoad from 'react-lazy-load'
import { toast } from 'react-hot-toast'
import { updateItemCart } from '@/core/utils/cart'
import useWishlist from '@/lib/wishlist/hooks/useWishlist'
import { HeartIcon } from '@heroicons/react/24/outline'
import useAuth from '@/core/hooks/useAuth'
import { useRouter } from 'next/router'
import createOrDeleteWishlistApi from '@/lib/wishlist/api/createOrDeleteWishlistApi'
const informationTabOptions = [
{ value: 'specification', label: 'Spesifikasi' },
{ value: 'description', label: 'Deskripsi' },
{ value: 'important', label: 'Info Penting' }
]
const Product = ({ product }) => {
const auth = useAuth()
const router = useRouter()
const { wishlist } = useWishlist({ productId: product?.id })
const [quantity, setQuantity] = useState('1')
const [selectedVariant, setSelectedVariant] = useState(null)
const [informationTab, setInformationTab] = useState(null)
const [activeVariant, setActiveVariant] = useState({
id: product.id,
code: product.code,
name: product.name,
price: product.lowestPrice,
stock: product.stockTotal,
weight: product.weight
})
const variantOptions = product.variants?.map((variant) => ({
value: variant.id,
label:
(variant.code ? `[${variant.code}] ` : '') +
(variant.attributes.length > 0 ? variant.attributes.join(', ') : product.name)
}))
useEffect(() => {
if (!selectedVariant && variantOptions.length == 1) {
setSelectedVariant(variantOptions[0])
}
}, [selectedVariant, variantOptions])
useEffect(() => {
if (selectedVariant) {
const variant = product.variants.find((variant) => variant.id == selectedVariant.value)
const variantAttributes =
variant.attributes.length > 0 ? ' - ' + variant.attributes.join(', ') : ''
setActiveVariant({
id: variant.id,
code: variant.code,
name: variant.parent.name + variantAttributes,
price: variant.price,
stock: variant.stock,
weight: variant.weight
})
}
}, [selectedVariant, product])
useEffect(() => {
if (!informationTab) {
setInformationTab(informationTabOptions[0].value)
}
}, [informationTab])
const validAction = () => {
let isValid = true
if (!selectedVariant) {
toast.error('Pilih varian terlebih dahulu')
isValid = false
}
if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) {
toast.error('Jumlah barang minimal 1')
isValid = false
}
return isValid
}
const handleClickCart = () => {
if (!validAction()) return
updateItemCart({
productId: activeVariant.id,
quantity
})
toast.success('Berhasil menambahkan ke keranjang')
}
const handleClickBuy = () => {
if (!validAction()) return
router.push(`/shop/checkout?productId=${activeVariant.id}&quantity=${quantity}`)
}
const toggleWishlist = async () => {
if (!auth) {
router.push('/login')
return
}
const data = { product_id: product.id }
await createOrDeleteWishlistApi({ data })
if (wishlist.data.productTotal > 0) {
toast.success('Berhasil menghapus dari wishlist')
} else {
toast.success('Berhasil menambahkan ke wishlist')
}
wishlist.refetch()
}
return (
<>