import React, { useEffect, useCallback } from "react"; import { Box, Typography, Radio } from "@mui/material"; import { withI18n } from "../../i18n/withTranslation.js"; const PaymentMethodSelector = ({ paymentMethod, onChange, deliveryMethod, onDeliveryMethodChange, cartItems = [], deliveryCost = 0, t }) => { // Calculate total amount const subtotal = cartItems.reduce((total, item) => total + item.price * item.quantity, 0); const totalAmount = subtotal + deliveryCost; // Handle payment method changes with automatic delivery method adjustment const handlePaymentMethodChange = useCallback((event) => { const selectedPaymentMethod = event.target.value; // If "Zahlung in der Filiale" is selected, force delivery method to "Abholung" if (selectedPaymentMethod === "cash" && deliveryMethod !== "Abholung") { if (onDeliveryMethodChange) { onDeliveryMethodChange({ target: { value: "Abholung" } }); } } onChange(event); }, [deliveryMethod, onDeliveryMethodChange, onChange]); // Handle delivery method changes - auto-switch to stripe when DHL/DPD is selected useEffect(() => { if ((deliveryMethod === "DHL" || deliveryMethod === "DPD") && paymentMethod === "cash") { handlePaymentMethodChange({ target: { value: "wire" /*stripe*/ } }); } }, [deliveryMethod, paymentMethod, handlePaymentMethodChange]); // Auto-switch to cash when total amount is 0 useEffect(() => { if (totalAmount === 0 && paymentMethod !== "cash") { handlePaymentMethodChange({ target: { value: "cash" } }); } }, [totalAmount, paymentMethod, handlePaymentMethodChange]); const paymentOptions = [ { id: "wire", name: t ? t('payment.methods.bankTransfer') : "Überweisung", description: t ? t('payment.methods.bankTransferDescription') : "Bezahlen Sie per Banküberweisung", disabled: totalAmount === 0, }, /*{ id: "stripe", name: "Karte oder Sofortüberweisung", description: totalAmount < 0.50 && totalAmount > 0 ? "Bezahlen Sie per Karte oder Sofortüberweisung (Mindestbetrag: 0,50 €)" : "Bezahlen Sie per Karte oder Sofortüberweisung", disabled: totalAmount < 0.50 || (deliveryMethod !== "DHL" && deliveryMethod !== "DPD" && deliveryMethod !== "Abholung"), icons: [ "/assets/images/giropay.png", "/assets/images/maestro.png", "/assets/images/mastercard.png", "/assets/images/visa_electron.png", ], },*/ /*{ id: "mollie", name: t ? t('payment.methods.cardPayment') : "Karte, Sofortüberweisung, Apple Pay, Google Pay, PayPal", description: totalAmount < 0.50 && totalAmount > 0 ? (t ? t('payment.methods.cardPaymentMinAmount') : "Bezahlen Sie per Karte oder Sofortüberweisung (Mindestbetrag: 0,50 €)") : (t ? t('payment.methods.cardPaymentDescription') : "Bezahlen Sie per Karte oder Sofortüberweisung"), disabled: totalAmount < 0.50 || (deliveryMethod !== "DHL" && deliveryMethod !== "DPD" && deliveryMethod !== "Abholung"), icons: [ "/assets/images/giropay.png", "/assets/images/maestro.png", "/assets/images/mastercard.png", "/assets/images/visa_electron.png", ], },*/ { id: "onDelivery", name: t ? t('payment.methods.cashOnDelivery') : "Nachnahme", description: t ? t('payment.methods.cashOnDeliveryDescription') : "Bezahlen Sie bei Lieferung (8,99 € Aufschlag)", disabled: totalAmount === 0 || deliveryMethod !== "DHL", icons: ["/assets/images/cash.png"], }, { id: "cash", name: t ? t('payment.methods.cashInStore') : "Zahlung in der Filiale", description: t ? t('payment.methods.cashInStoreDescription') : "Bei Abholung bezahlen", disabled: false, // Always enabled icons: ["/assets/images/cash.png"], }, ]; return ( <> {t ? t('payment.methods.selectPaymentMethod') : 'Zahlungsart wählen'} {paymentOptions.map((option, index) => ( handlePaymentMethodChange({ target: { value: option.id } }) : undefined } > {option.icons && ( {option.icons.map((iconPath, iconIndex) => ( {`Payment ))} )} ))} ); }; export default withI18n()(PaymentMethodSelector);