import React, { useState, useEffect } from 'react'; import styles from './ProductDetail.module.css'; import { useNavigate } from 'react-router-dom'; const ProductDetail = ({ willDo, setWillDo, subscriptions, product, requestLogin, setShowedModal }) => { const [showChildSelector, setShowChildSelector] = useState(false); const [selectedChildIds, setSelectedChildIds] = useState([]); const [matchingSubscriptions, setMatchingSubscriptions] = useState([]); const [selectedSubscriptionId, setSelectedSubscriptionId] = useState(0); const [showSubscriptionSelector, setShowSubscriptionSelector] = useState(false); const [showNamingInput, setShowNamingInput] = useState(false); const [customName, setCustomName] = useState(''); const navigate = useNavigate(); const onCheckout = () => { const tokenCookie = document.cookie.split('; ').find(row => row.startsWith('token=')); const token = tokenCookie ? tokenCookie.split('=')[1] : ''; if (!token) { requestLogin('checkout'); return; } if (product.type == 'product') { const hasMatchingSubscription = Array.isArray(subscriptions) && subscriptions.some(sub => String(sub.product_id) === String(product.id) || String(sub.product_parent_id) === String(product.id) ); // Always show children selector first if product has children if (product.children && product.children.length > 0) { setShowChildSelector(true); if (hasMatchingSubscription) { const matching = subscriptions.filter(sub => String(sub.product_id) === String(product.id) || String(sub.product_parent_id) === String(product.id) ); if (matching.length > 0) { // ✅ Select only the first for each product_name const uniqueByName = Array.from( new Map(matching.map(sub => [sub.product_name, sub])).values() ); setMatchingSubscriptions(uniqueByName); } } return; } // No children, but has subscription match if (hasMatchingSubscription) { const matching = subscriptions.filter(sub => String(sub.product_id) === String(product.id) || String(sub.product_parent_id) === String(product.id) ); if (matching.length > 0 && !product.end_date) { const uniqueByName = Array.from( new Map(matching.map(sub => [sub.product_name, sub])).values() ); setMatchingSubscriptions(uniqueByName); setShowSubscriptionSelector(true); return; } else { const itemsParam = JSON.stringify([product.id]); window.location.href = `https://checkout.kediritechnopark.com/?token=${token}&itemsId=${itemsParam}&set_name=${product.name}&redirect_uri=https://kediritechnopark.com/products&redirect_failed=https://kediritechnopark.com`; return; } } setShowNamingInput(true); return; } // No children, no matching subscription const itemsParam = JSON.stringify([product.id]); window.location.href = `https://checkout.kediritechnopark.com/?token=${token}&itemsId=${itemsParam}&redirect_uri=https://kediritechnopark.com/products&redirect_failed=https://kediritechnopark.com`; }; const onConfirmChildren = () => { if (matchingSubscriptions.length > 0 && !product.executeCheckout) { setShowChildSelector(false); setShowSubscriptionSelector(true); return; } else if (!product.executeCheckout){ setShowChildSelector(false); setShowNamingInput(true); } const tokenCookie = document.cookie.split('; ').find(row => row.startsWith('token=')); const token = tokenCookie ? tokenCookie.split('=')[1] : ''; if (selectedChildIds.length === 0) { alert('Pilih minimal satu produk'); return; } const encodedName = encodeURIComponent(product.executeCheckout); const itemsParam = selectedChildIds.length > 0 ? JSON.stringify(selectedChildIds) : JSON.stringify([product.id]); window.location.href = `https://checkout.kediritechnopark.com/?token=${token}&itemsId=${itemsParam}&set_name=${encodedName}&redirect_uri=https://kediritechnopark.com/products&redirect_failed=https://kediritechnopark.com`; }; const onFinalCheckoutNewProduct = () => { if (!customName.trim()) { alert('Nama produk tidak boleh kosong'); return; } const tokenCookie = document.cookie.split('; ').find(row => row.startsWith('token=')); const token = tokenCookie ? tokenCookie.split('=')[1] : ''; const itemsParam = selectedChildIds.length > 0 ? JSON.stringify(selectedChildIds) : JSON.stringify([product.id]); const encodedName = encodeURIComponent(customName.trim()); window.location.href = `https://checkout.kediritechnopark.com/?token=${token}&itemsId=${itemsParam}&new_name=${encodedName}&redirect_uri=https://kediritechnopark.com/products&redirect_failed=https://kediritechnopark.com`; }; const onConfirmSelector = () => { if (selectedSubscriptionId == null) { alert('Pilih salah satu langganan.'); return; } if (selectedSubscriptionId === 0) { setShowNamingInput(true); } else { const tokenCookie = document.cookie.split('; ').find(row => row.startsWith('token=')); const token = tokenCookie ? tokenCookie.split('=')[1] : ''; const itemsParam = selectedChildIds.length > 0 ? JSON.stringify(selectedChildIds) : JSON.stringify([product.id]); const selectedSubscription = matchingSubscriptions.find( (sub) => sub.id === selectedSubscriptionId ); const productName = selectedSubscription?.product_name; const encodedName = encodeURIComponent(productName); window.location.href = `https://checkout.kediritechnopark.com/?token=${token}&itemsId=${itemsParam}&set_name=${encodedName}&redirect_uri=https://kediritechnopark.com/products&redirect_failed=https://kediritechnopark.com`; } }; useEffect(() => { if (willDo === 'checkout') { onCheckout(); } if(setWillDo) setWillDo(''); // Reset willDo after handling }, []); const priceColor = product.price === 0 ? '#059669' : '#2563eb'; console.log(product) return (
{!showChildSelector && !showSubscriptionSelector && !showNamingInput && ( <>

{product.name.split('%%%')[0]}

{product.price == null ? 'Pay-As-You-Go' : `Rp ${parseInt(product.price).toLocaleString('id-ID')}`}

{product.description}

{(product.site_url || product.end_date || product.quantity) && ( )}
)} {showChildSelector && (

Pilih Paket

{product.children.map(child => ( ))}
)} {showSubscriptionSelector && !showNamingInput && (
Kamu sudah punya produk ini
{setShowedModal('');navigate('/dashboard')}}>
Perpanjang produk ini
Atau
)} {showNamingInput && (
Buat {product.name.split('%%%')[0]} Baru
setCustomName(e.target.value)} style={{ width: '100%', padding: '8px', marginBottom: '16px', borderRadius: '10px' }} /> { matchingSubscriptions.some( (sub) => sub.product_name === `${product.name}@${customName}` ) && (

Nama produk sudah digunakan.

) }
)}
); }; export default ProductDetail;