/** * Detect user's preferred language from their existing notes * Analyzes language distribution across all user's notes */ import { auth } from '@/auth' import { prisma } from '@/lib/prisma' import { SupportedLanguage } from './load-translations' export async function detectUserLanguage(): Promise { const session = await auth() // Default to English for non-logged-in users if (!session?.user?.id) { return 'en' } try { // Get all user's notes with detected languages const notes = await prisma.note.findMany({ where: { userId: session.user.id, language: { not: null } }, select: { language: true, languageConfidence: true } }) if (notes.length === 0) { return 'en' // Default for new users } // Count language occurrences weighted by confidence const languageScores: Record = {} for (const note of notes) { if (note.language) { const confidence = note.languageConfidence || 0.8 languageScores[note.language] = (languageScores[note.language] || 0) + confidence } } // Find language with highest score const sortedLanguages = Object.entries(languageScores) .sort(([, a], [, b]) => b - a) if (sortedLanguages.length > 0) { const topLanguage = sortedLanguages[0][0] as SupportedLanguage // Verify it's a supported language if (['en', 'fr', 'es', 'de', 'fa', 'it', 'pt', 'ru', 'zh', 'ja', 'ko', 'ar', 'hi', 'nl', 'pl'].includes(topLanguage)) { return topLanguage } } return 'en' } catch (error) { console.error('Error detecting user language:', error) return 'en' } }