import { NextRequest, NextResponse } from 'next/server'
import { getServerSession } from 'next-auth'
import { authOptions } from '@/lib/auth'
import { prisma } from '@/lib/prisma'
import OpenAI from 'openai'

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY })

export async function GET(
  req: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  const session = await getServerSession(authOptions)
  if (!session?.user?.id) {
    return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })
  }

  const { id } = await params

  const analysis = await prisma.processAnalysis.findFirst({
    where: {
      id,
      userId: session.user.id,
      status: 'DONE',
    },
    select: {
      id: true,
      title: true,
      filename: true,
      analysis: true,
      extractedText: true,
    },
  })

  if (!analysis) {
    return NextResponse.json({ error: 'Análise não encontrada' }, { status: 404 })
  }

  try {
    const completion = await openai.chat.completions.create({
      model: 'gpt-4o-mini',
      temperature: 0.3,
      messages: [
        {
          role: 'system',
          content: `Você é um assistente jurídico especializado. Extraia informações estruturadas do parecer jurídico fornecido.
Responda APENAS com JSON válido, sem markdown, sem code blocks. O formato deve ser:
{
  "autor": "nome do autor/requerente ou string vazia",
  "reu": "nome do réu/requerido ou string vazia",
  "fatos": "resumo dos fatos principais",
  "fundamentos": "fundamentos jurídicos identificados (artigos, leis, jurisprudência)",
  "pedidos": "pedidos sugeridos com base na análise",
  "area": "uma das opções: civil, trabalhista, penal, tributario, familia, empresarial, consumidor, administrativo"
}`,
        },
        {
          role: 'user',
          content: `Extraia as informações do seguinte parecer jurídico:\n\n${analysis.analysis.substring(0, 8000)}`,
        },
      ],
    })

    const content = completion.choices[0]?.message?.content || '{}'
    
    let extracted
    try {
      extracted = JSON.parse(content)
    } catch {
      // Try to extract JSON from the response if it has markdown wrapping
      const jsonMatch = content.match(/\{[\s\S]*\}/)
      extracted = jsonMatch ? JSON.parse(jsonMatch[0]) : {}
    }

    return NextResponse.json({
      analysisId: analysis.id,
      filename: analysis.filename,
      title: analysis.title,
      parecer: analysis.analysis,
      extracted: {
        autor: extracted.autor || '',
        reu: extracted.reu || '',
        fatos: extracted.fatos || '',
        fundamentos: extracted.fundamentos || '',
        pedidos: extracted.pedidos || '',
        area: extracted.area || 'civil',
      },
    })
  } catch (error) {
    console.error('Error extracting petition data:', error)
    return NextResponse.json(
      { error: 'Erro ao extrair dados do parecer' },
      { status: 500 }
    )
  }
}
