import React, { useState, useEffect } from 'react'; import { useApp } from '../../context/AppContext'; import { getToken } from '../../services/auth'; import { Check, Sparkles, CreditCard, Loader2, Info, ShieldCheck, XCircle } from 'lucide-react'; import { CancelSubscriptionModal } from '../CancelSubscriptionModal'; export const Pricing = () => { const { authUser, plan, planYenile, isAdmin } = useApp(); const [data, setData] = useState(null); const [busy, setBusy] = useState(null); const [error, setError] = useState(null); const [yillik, setYillik] = useState(true); // yıllık varsayılan (indirimli) const [iptalAcik, setIptalAcik] = useState(false); const [iptalSonuc, setIptalSonuc] = useState(null); useEffect(() => { fetch('/api/billing/plans') .then((r) => r.json()) .then(setData) .catch(() => setData({ configured: false, plans: [] })); }, []); const upgrade = async (planId) => { setBusy(planId); setError(null); try { const res = await fetch('/api/billing/checkout', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${getToken()}` }, body: JSON.stringify({ planId, periyot: yillik ? 'yillik' : 'aylik' }), }); const d = await res.json(); if (d.success && d.url) window.location.href = d.url; else setError(d.error || 'Ödeme başlatılamadı'); } catch (e) { setError(e.message); } finally { setBusy(null); } }; const plans = data?.plans || []; // Yıllık tutar Stripe'taki fiyatla birebir aynı olsun diye plandan gelir const fiyatla = (p) => (yillik ? (p.fiyatYillik ?? Math.round(p.fiyat * 12 * 0.83)) : p.fiyat); const aylikKarsiligi = (p) => (p.fiyatYillik ? Math.round(p.fiyatYillik / 12) : p.fiyat); return (
İhtiyacınıza uygun planı seçin. İstediğiniz zaman iptal edebilirsiniz.
Ödeme altyapısı henüz bağlanmadı. Satın alma için sunucuya STRIPE_SECRET_KEY ve
plan fiyat kimlikleri (STRIPE_PRICE_PRO, STRIPE_PRICE_KURUMSAL) eklenmeli.
Planlar aşağıda görüntülenebilir.
Mevcut aboneliğiniz
{plan.abonelikVar ? plan.abonelikAdi : 'Ücretsiz'} {plan.yonetici && ( yönetici erişimi: {plan.planAdi} )}
Yönetici hesapları tüm özelliklere erişir; bu, satın aldığınız aboneliğin yerine geçmez.
)} {iptalSonuc && ({p.ozet}
KDV hariç {yillik && ( <> · ayda ₺{aylikKarsiligi(p).toLocaleString('tr-TR')} · yılda{' '} ₺{(p.fiyat * 12 - fiyatla(p)).toLocaleString('tr-TR')} tasarruf > )}
)}Ödemeler Stripe üzerinden güvenli şekilde alınır; kart bilgileriniz İhaleist sunucularında saklanmaz. Aboneliğinizi istediğiniz zaman iptal edebilirsiniz.