import React, { useState, useEffect } from 'react'; import { membershipService, paymentService, MembershipTier, MembershipCreateData, PaymentCreateData } from '../services/membershipService'; import { useFeatureFlags } from '../contexts/FeatureFlagContext'; import SquarePaymentNew from './SquarePaymentNew'; import { londonTodayDateInput } from '../utils/timezone'; interface MembershipSetupProps { onMembershipCreated: () => void; onCancel: () => void; } const MembershipSetup: React.FC = ({ onMembershipCreated, onCancel }) => { const [tiers, setTiers] = useState([]); const [selectedTier, setSelectedTier] = useState(null); const [loading, setLoading] = useState(false); const [step, setStep] = useState<'select' | 'payment' | 'confirm'>('select'); const [paymentMethod, setPaymentMethod] = useState<'square' | 'cash' | null>(null); const [error, setError] = useState(''); const [createdMembershipId, setCreatedMembershipId] = useState(null); const { isEnabled } = useFeatureFlags(); useEffect(() => { loadTiers(); }, []); const loadTiers = async () => { try { const tierData = await membershipService.getTiers(); setTiers(tierData); } catch (error) { console.error('Failed to load tiers:', error); setError('Failed to load membership tiers'); } }; const handleTierSelect = (tier: MembershipTier) => { setSelectedTier(tier); setStep('payment'); }; const handleCashPayment = async () => { if (!selectedTier || !createdMembershipId) return; setLoading(true); setError(''); try { // Create cash/dummy payment const paymentData: PaymentCreateData = { amount: selectedTier.annual_fee, payment_method: 'cash', membership_id: createdMembershipId, notes: `Cash payment for ${selectedTier.name} membership` }; await paymentService.createPayment(paymentData); setStep('confirm'); } catch (err: any) { setError(err.response?.data?.detail || 'Failed to record payment'); } finally { setLoading(false); } }; const handleSquarePaymentSuccess = (paymentResult: any) => { console.log('Square payment successful:', paymentResult); // Payment was successful, membership was created and activated by the backend setStep('confirm'); }; const handleSquarePaymentError = (error: string) => { setError(error); setLoading(false); }; const handlePaymentMethodSelect = async (method: 'square' | 'cash') => { setPaymentMethod(method); if (!selectedTier) return; // For cash payments, create membership in PENDING state // For Square payments, we'll create membership only after successful payment if (method === 'cash') { setLoading(true); setError(''); try { const startDate = londonTodayDateInput(); const endDateValue = new Date(`${startDate}T00:00:00Z`); endDateValue.setUTCFullYear(endDateValue.getUTCFullYear() + 1); const endDate = endDateValue.toISOString().split('T')[0]; const membershipData: MembershipCreateData = { tier_id: selectedTier.id, start_date: startDate, end_date: endDate, auto_renew: false }; const membership = await membershipService.createMembership(membershipData); setCreatedMembershipId(membership.id); setLoading(false); } catch (err: any) { setError(err.response?.data?.detail || 'Failed to create membership'); setLoading(false); } } // For Square, just set the payment method - membership created after successful payment }; const handleConfirm = () => { onMembershipCreated(); }; if (step === 'select') { return (

Membership Setup

Choose Your Membership

{error &&
{error}
}
{tiers.map(tier => (
handleTierSelect(tier)} >

{tier.name}

£{tier.annual_fee.toFixed(2)}/year

{tier.description}

Benefits:

{tier.benefits}

))}
); } if (step === 'payment') { return (

Membership Setup

Complete Payment

{error &&
{error}
} {selectedTier && (

Selected Membership: {selectedTier.name}

Annual Fee: £{selectedTier.annual_fee.toFixed(2)}

Benefits: {selectedTier.benefits}

)} {!paymentMethod && (

Choose Payment Method

{isEnabled('CASH_PAYMENT_ENABLED') && ( )}
)} {paymentMethod === 'square' && selectedTier && (
)} {paymentMethod === 'cash' && createdMembershipId && (
Cash Payment Selected

Your membership will be marked as pending until an administrator confirms payment receipt.

)}
); } if (step === 'confirm') { const isCashPayment = paymentMethod === 'cash'; return (

Membership Setup

{isCashPayment ? 'Membership Application Submitted!' : 'Payment Successful!'}

{selectedTier && (

Your Membership Details:

Tier: {selectedTier.name}

Annual Fee: £{selectedTier.annual_fee.toFixed(2)}

Status: {isCashPayment ? 'Pending' : 'Active'}

{isCashPayment ? 'Your membership application has been submitted. An administrator will review and activate your membership once payment is confirmed.' : 'Thank you for your payment! Your membership has been activated and is now live. You can start enjoying your membership benefits immediately.' }

)}
); } return null; }; export default MembershipSetup;