import React, { useEffect, useState } from 'react' import { FaCreditCard, FaLock, FaArrowLeft, FaUser, FaBuilding, FaMailBulk, FaPhone, FaMapMarkerAlt, FaMap, FaGlobe, FaMoneyBillWave, FaDollarSign, FaUserPlus } from 'react-icons/fa'; import { BillingCycle, BasketItem, InstallmentOptionDto, PaymentMethodDto, } from '@/proxy/order/models' import { OrderService } from '@/services/order.service' import { CustomTenantDto } from '@/proxy/config/models' interface CartState { items: BasketItem[] total: number globalBillingCycle: BillingCycle globalPeriod: number } interface PaymentFormProps { tenant: CustomTenantDto onBack: () => void onComplete: (paymentData: Record) => void cartState: CartState } export const PaymentForm: React.FC = ({ tenant, onBack, onComplete, cartState, }) => { const [selectedPaymentMethod, setSelectedPaymentMethod] = useState('credit-card') const [selectedInstallment, setSelectedInstallment] = useState() const [paymentData, setPaymentData] = useState({ cardNumber: '', expiryDate: '', cvv: '', cardName: '', }) const [paymentMethods, setPaymentMethods] = useState([]) const [installmentOptions, setInstallmentOptions] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { const fetchData = async () => { const orderService = new OrderService() try { const paymentResponse = await orderService.getPaymentMethodList() setPaymentMethods(paymentResponse.data) if (paymentResponse.data.length > 0) { setSelectedPaymentMethod(paymentResponse.data[1].id) } const installmentResponse = await orderService.getInstallmentOptionList() setInstallmentOptions(installmentResponse.data) } catch (err) { console.error('Ödeme şekilleri ve Komisyon Bilgileri alınamadı', err) } finally { setLoading(false) } } fetchData() }, []) const selectedMethod = paymentMethods.find((m) => m.id === selectedPaymentMethod) let commission = 0 if (selectedPaymentMethod === 'credit-card' && selectedInstallment) { commission = cartState.total * selectedInstallment.commission } else if (selectedMethod) { commission = cartState.total * selectedMethod.commission } const finalTotal = cartState.total + commission const formatPrice = (price: number) => new Intl.NumberFormat('tr-TR', { style: 'currency', currency: 'TRY', minimumFractionDigits: 2, }).format(price) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() onComplete({ ...paymentData, paymentMethod: selectedMethod?.name ?? '', installments: selectedPaymentMethod === 'credit-card' ? (selectedInstallment?.id ?? 1) : 1, installmentName: selectedPaymentMethod === 'credit-card' ? (selectedInstallment?.name ?? '') : 'Tek Ödeme', commission, total: finalTotal, }) } const handleInputChange = (field: string, value: string) => { setPaymentData((prev) => ({ ...prev, [field]: value })) } return (
{loading ? (
Yükleniyor...
) : (
{/* 3 Sütun: Ödeme Yöntemi | Taksit Seçenekleri | Sipariş Özeti */}
{tenant && ( <>

Müşteri Bilgileri

Kurum Kodu: {tenant.name}
Kurucu: {tenant.founder}
Şirket: {tenant.institutionName}
E-posta: {tenant.email}
Telefon: {tenant.phone}
Adres:
{tenant.address}
Ülke: {tenant.country}
Şehir: {tenant.city}
İlçe: {tenant.district}
Posta Kodu: {tenant.postalCode}
Vergi Dairesi: {tenant.taxOffice}
Vergi No: {tenant.vknTckn}
{tenant.reference && (
Referans: {tenant.reference}
)}
)}
{/* 1. Sütun: Ödeme Yöntemi */}

Ödeme Yöntemi

{paymentMethods.map((method) => ( ))}
{/* Taksit Seçenekleri */} {selectedPaymentMethod === 'credit-card' && (

Taksit Seçenekleri

{installmentOptions.map((option) => ( ))}
)}
{/* 3. Sütun: Kart Bilgileri + Sipariş Özeti ve Butonlar */}
{/* Kart Bilgileri */} {selectedPaymentMethod !== 'bank-transfer' && (

Kart Bilgileri

handleInputChange('cardName', e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg" placeholder="Kart Üzerindeki İsim" /> handleInputChange('cardNumber', e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg" placeholder="Kart Numarası" maxLength={19} />
handleInputChange('expiryDate', e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg" placeholder="MM/YY" maxLength={5} /> handleInputChange('cvv', e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg" placeholder="CVV" maxLength={4} />
)} {/* Sipariş Özeti ve Butonlar */}

Sipariş Özeti

{cartState.items.map((item, index) => (
{item.product.name}
{item.quantity}x -{' '} {item.billingCycle === 'monthly' ? 'Aylık' : item.billingCycle === 'yearly' ? 'Yıllık' : 'Aylık'}{' '} {cartState.globalPeriod > 1 && `(${cartState.globalPeriod} ${item.billingCycle === 'monthly' ? 'Ay' : 'Yıl'})`}
{formatPrice(item.totalPrice)}
))}
Ara Toplam: {formatPrice(cartState.total)}
Komisyon: {formatPrice(commission)}
{selectedPaymentMethod === 'credit-card' && selectedInstallment?.id && selectedInstallment.id > 1 && (
Aylık Taksit: {formatPrice(finalTotal / selectedInstallment.id)} x{' '} {selectedInstallment.id}
)}
Toplam: {formatPrice(finalTotal)}
{/* Butonlar */}
)}
) }