import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/auth'
import { getAIProvider } from '@/lib/ai/factory'
import { getSystemConfig } from '@/lib/config'

export async function POST(request: NextRequest) {
  try {
    const session = await auth()

    if (!session?.user?.id) {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
    }

    const { text } = await request.json()

    // Validation
    if (!text || typeof text !== 'string') {
      return NextResponse.json({ error: 'Text is required' }, { status: 400 })
    }

    // Validate word count
    const wordCount = text.split(/\s+/).length
    if (wordCount < 10) {
      return NextResponse.json(
        { error: 'Text must have at least 10 words to transform' },
        { status: 400 }
      )
    }

    if (wordCount > 500) {
      return NextResponse.json(
        { error: 'Text must have maximum 500 words to transform' },
        { status: 400 }
      )
    }

    const config = await getSystemConfig()
    const provider = getAIProvider(config)

    // Detect language from text
    const hasFrench = /[àâäéèêëïîôùûüÿç]/i.test(text)
    const responseLanguage = hasFrench ? 'French' : 'English'

    // Build prompt to transform text to Markdown
    const prompt = hasFrench
      ? `Tu es un expert en Markdown. Transforme ce texte ${responseLanguage} en Markdown bien formaté.

IMPORTANT :
- Ajoute des titres avec ## pour les sections principales
- Utilise des listes à puces (-) ou numérotées (1.) quand approprié
- Ajoute de l'emphase (gras **texte**, italique *texte*) pour les mots clés
- Utilise des blocs de code pour le code ou les commandes
- Présente l'information de manière claire et structurée
- GARDE le même sens et le contenu, seul le format change

Texte à transformer :
${text}

Réponds SEULEMENT avec le texte transformé en Markdown, sans explications.`
      : `You are a Markdown expert. Transform this ${responseLanguage} text into well-formatted Markdown.

IMPORTANT:
- Add headings with ## for main sections
- Use bullet lists (-) or numbered lists (1.) when appropriate
- Add emphasis (bold **text**, italic *text*) for key terms
- Use code blocks for code or commands
- Present information clearly and structured
- KEEP the same meaning and content, only change the format

Text to transform:
${text}

Respond ONLY with the transformed Markdown text, no explanations.`

    
    const transformedText = await provider.generateText(prompt)

    
    return NextResponse.json({
      originalText: text,
      transformedText: transformedText,
      language: responseLanguage
    })
  } catch (error: any) {
    return NextResponse.json(
      { error: error.message || 'Failed to transform text to Markdown' },
      { status: 500 }
    )
  }
}
