import { NextRequest, NextResponse } from 'next/server' import { auth } from '@/auth' import { mathFromTextService } from '@/lib/ai/services/math-from-text.service' import { reserveUsageOrThrow, QuotaExceededError } from '@/lib/entitlements' export async function POST(request: NextRequest) { try { const session = await auth() if (!session?.user?.id) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const { description } = await request.json() if (!description || typeof description !== 'string' || !description.trim()) { return NextResponse.json({ error: 'Description is required' }, { status: 400 }) } try { await reserveUsageOrThrow(session.user.id, 'reformulate') } catch (err) { if (err instanceof QuotaExceededError) { const isTierLocked = err.currentQuota === 0 return NextResponse.json( { error: isTierLocked ? 'feature_locked' : 'quota_exceeded', errorKey: isTierLocked ? 'ai.featureLocked' : 'ai.quotaExceeded', upgradeTier: err.upgradeTier, quotaExceeded: true }, { status: 402 }, ) } throw err } const latex = await mathFromTextService.generate(description) return NextResponse.json({ latex }) } catch (error: any) { return NextResponse.json({ error: error.message || 'Failed to generate LaTeX' }, { status: 500 }) } }