'use client'; import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { FaTimes, FaCreditCard, FaLock } from 'react-icons/fa'; import { Album } from '@/lib/types'; interface PaymentModalProps { album: Album | null; onClose: () => void; onSuccess: (albumId: string, transactionId: string) => void; } export default function PaymentModal({ album, onClose, onSuccess }: PaymentModalProps) { const [cardNumber, setCardNumber] = useState(''); const [cardName, setCardName] = useState(''); const [expiry, setExpiry] = useState(''); const [cvv, setCvv] = useState(''); const [processing, setProcessing] = useState(false); const [error, setError] = useState(''); const formatCardNumber = (value: string) => { const numbers = value.replace(/\s/g, ''); const groups = numbers.match(/.{1,4}/g); return groups ? groups.join(' ') : numbers; }; const formatExpiry = (value: string) => { const numbers = value.replace(/\D/g, ''); if (numbers.length >= 2) { return numbers.slice(0, 2) + '/' + numbers.slice(2, 4); } return numbers; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); // Basic validation if (cardNumber.replace(/\s/g, '').length !== 16) { setError('Invalid card number'); return; } if (!cardName.trim()) { setError('Card name is required'); return; } if (expiry.length !== 5) { setError('Invalid expiry date'); return; } if (cvv.length !== 3 && cvv.length !== 4) { setError('Invalid CVV'); return; } setProcessing(true); // Simulate payment processing setTimeout(() => { // Generate a mock transaction ID const transactionId = 'TXN-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9).toUpperCase(); setProcessing(false); if (album) { onSuccess(album.id, transactionId); } }, 2000); }; if (!album) return null; return ( {album && ( e.stopPropagation()} className="glass-effect rounded-2xl max-w-md w-full p-8 border-2 border-accent-cyan/30" > {/* Header */}

Purchase Album

{/* Album Info */}

{album.title}

{album.songs.length} tracks • {album.genre}

${album.price}

{/* Payment Form */}
{/* Card Number */}
{ const formatted = formatCardNumber(e.target.value.replace(/\D/g, '').slice(0, 16)); setCardNumber(formatted); }} placeholder="1234 5678 9012 3456" className="w-full px-4 py-3 bg-white/5 border border-white/10 rounded-lg focus:border-accent-cyan focus:outline-none focus:ring-2 focus:ring-accent-cyan/50 text-white placeholder-gray-500" required />
{/* Card Name */}
setCardName(e.target.value.toUpperCase())} placeholder="JOHN DOE" className="w-full px-4 py-3 bg-white/5 border border-white/10 rounded-lg focus:border-accent-cyan focus:outline-none focus:ring-2 focus:ring-accent-cyan/50 text-white placeholder-gray-500" required />
{/* Expiry and CVV */}
setExpiry(formatExpiry(e.target.value))} placeholder="MM/YY" className="w-full px-4 py-3 bg-white/5 border border-white/10 rounded-lg focus:border-accent-cyan focus:outline-none focus:ring-2 focus:ring-accent-cyan/50 text-white placeholder-gray-500" required />
setCvv(e.target.value.replace(/\D/g, '').slice(0, 4))} placeholder="123" className="w-full px-4 py-3 bg-white/5 border border-white/10 rounded-lg focus:border-accent-cyan focus:outline-none focus:ring-2 focus:ring-accent-cyan/50 text-white placeholder-gray-500" required />
{/* Error Message */} {error && ( {error} )} {/* Submit Button */} {/* Security Notice */}

This is a demo payment form. No real charges will be made.

)}
); }