import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { CreditCard, CheckCircle, Clock } from 'lucide-react'; import { api } from '../services/api'; import { Subscription } from '../types'; import { useI18n } from '../contexts/I18nContext'; import { usePageTitle } from '../hooks/usePageTitle'; import { useToast } from '../contexts/ToastContext'; import Button from '../components/common/Button'; import Card, { CardContent, CardHeader } from '../components/common/Card'; interface SubscriptionStatus { has_active_subscription: boolean; subscription: Subscription | null; } const SubscriptionPage: React.FC = () => { const { t } = useI18n(); usePageTitle('Subscription'); const { showToast } = useToast(); const [status, setStatus] = useState(null); const [loading, setLoading] = useState(true); const [initiating, setInitiating] = useState(null); useEffect(() => { api.subscriptions.me() .then((data: any) => setStatus(data)) .catch(() => {}) .finally(() => setLoading(false)); }, []); const handleSubscribe = async (plan: 'monthly' | 'yearly') => { setInitiating(plan); try { const result = await api.payments.initiate({ type: 'subscription', plan }) as any; window.location.href = result.payment_url; } catch (err: any) { showToast(err.message || 'Failed to initiate payment', 'error'); setInitiating(null); } }; const formatter = new Intl.NumberFormat('fr-TG', { style: 'currency', currency: 'XOF', minimumFractionDigits: 0, }); return (

{t.subscription.title}

{/* Current status */} {loading ? (
) : status?.has_active_subscription && status.subscription ? (

{t.subscription.activePlan}:{' '} {status.subscription.plan === 'monthly' ? t.subscription.monthly : t.subscription.yearly}

{t.subscription.activeUntil}{' '} {new Date(status.subscription.ends_at).toLocaleDateString('fr-TG')}

) : (

{t.subscription.noSubscription}

{t.subscription.noSubscriptionDesc}

)} {/* Plan cards */}

{t.subscription.choosePlan}

{/* Monthly */}

{t.subscription.monthly}

{formatter.format(1000)}

{t.subscription.perMonth}

{t.subscription.monthlyDesc}

{/* Yearly */}
{t.subscription.saveMonths}

{t.subscription.yearly}

{formatter.format(10000)}

{t.subscription.perYear}

{t.subscription.yearlyDesc}

← Back to Dashboard

); }; export default SubscriptionPage;