'use client' import { Check } from 'lucide-react' import Link from 'next/link' import { useState } from 'react' import { useQuery } from '@tanstack/react-query' import { useLanguage } from '@/lib/i18n' import { SUBSCRIPTION_TRIAL_DAYS } from '@/lib/billing/trial-constants' export default function PricingPage() { const { t } = useLanguage() const [billingInterval, setBillingInterval] = useState<'monthly' | 'annual'>('monthly') const trialDays = SUBSCRIPTION_TRIAL_DAYS const { data: byokCatalog } = useQuery({ queryKey: ['public', 'byok-catalog'], queryFn: async () => { const res = await fetch('/api/public/byok-catalog') if (!res.ok) throw new Error('catalog') return res.json() as Promise<{ providers: { id: string }[] }> }, staleTime: 60_000, }) const providerCount = byokCatalog?.providers.length || '…' const plans = [ { key: 'basic', popular: false, hasTrial: false, price: t('landing.pricing.basicPrice'), period: '' }, { key: 'pro', popular: true, hasTrial: true, price: billingInterval === 'monthly' ? t('landing.pricing.proMonthly') : t('landing.pricing.proAnnualMonthly'), period: billingInterval === 'monthly' ? t('landing.pricing.perMonth') : t('landing.pricing.perMonthAnnual'), }, { key: 'business', popular: false, hasTrial: true, price: billingInterval === 'monthly' ? t('landing.pricing.businessMonthly') : t('landing.pricing.businessAnnualMonthly'), period: billingInterval === 'monthly' ? t('landing.pricing.perMonth') : t('landing.pricing.perMonthAnnual'), }, { key: 'enterprise', popular: false, hasTrial: false, price: t('landing.pricing.enterprisePrice'), period: '', }, ] return (
{t('landing.pricing.label')}

{t('landing.pricing.title')}

{t('landing.pricing.desc')}

{plans.map((plan) => (
{plan.popular && ( {t('landing.pricing.popular')} )}

{t(`landing.pricing.${plan.key}.name`)}

{plan.price} {plan.period && {plan.period}}
{plan.hasTrial && (

{t('landing.pricing.trialBadge', { days: trialDays })}

)}

{t(`landing.pricing.${plan.key}.desc`)}

    {plan.hasTrial && (
  • {t('landing.pricing.trialFeature', { days: trialDays })}
  • )} {[0, 1, 2, 3, 4, 5].map((j) => { const feat = t(`landing.pricing.${plan.key}.feature${j}`, { count: providerCount }) if (!feat || feat.startsWith('landing.')) return null return (
  • {feat}
  • ) })}
{plan.hasTrial ? t('landing.pricing.trialCta', { days: trialDays }) : t(`landing.pricing.${plan.key}.cta`)}
))}
) }