import { NextRequest, NextResponse } from 'next/server' import { auth } from '@/auth' import { getAISettings } from '@/app/actions/ai-settings' import { describeImages } from '@/lib/ai/services/image-description.service' import { hasUserAiConsent } from '@/lib/consent/server-consent' import { withAiQuota, handleQuotaHttpError } from '@/lib/ai-quota' export async function POST(req: NextRequest) { try { const session = await auth() if (!session?.user?.id) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } if (!(await hasUserAiConsent())) { return NextResponse.json({ error: 'ai_consent_required' }, { status: 403 }) } const userSettings = await getAISettings(session.user.id) if (userSettings.paragraphRefactor === false) { return NextResponse.json({ error: 'Feature disabled' }, { status: 403 }) } const { imageUrls, mode, language } = await req.json() if (!Array.isArray(imageUrls) || imageUrls.length === 0) { return NextResponse.json({ error: 'imageUrls must be a non-empty array' }, { status: 400 }) } const isTitleMode = mode === 'title' const feature = isTitleMode ? 'auto_title' : 'reformulate' const lane = isTitleMode ? 'tags' : 'chat' const result = await withAiQuota( session.user.id, feature, () => describeImages( imageUrls, isTitleMode ? 'title' : 'description', language || 'fr' ), { lane }, ) if (isTitleMode && result.suggestions) { return NextResponse.json({ suggestions: result.suggestions }) } return NextResponse.json(result) } catch (error: unknown) { const quotaResp = handleQuotaHttpError(error) if (quotaResp) return quotaResp console.error('[describe-image] Error:', error) const message = error instanceof Error ? error.message : 'Failed to describe image' return NextResponse.json({ error: message }, { status: 500 }) } }