import { NextRequest, NextResponse } from 'next/server'

export const runtime = 'edge'

export async function POST(request: NextRequest) {
  try {
    const body = await request.json()

    // Validar dados obrigatórios
    if (!body.items || !Array.isArray(body.items) || body.items.length === 0) {
      return NextResponse.json(
        { error: 'Items são obrigatórios' },
        { status: 400 }
      )
    }

    // Access Token do MercadoPago (você deve configurar isso nas variáveis de ambiente)
    const accessToken = process.env.MERCADO_PAGO_ACCESS_TOKEN

    if (!accessToken) {
      console.error('MERCADO_PAGO_ACCESS_TOKEN não configurado')
      return NextResponse.json(
        { error: 'Configuração de pagamento não encontrada' },
        { status: 500 }
      )
    }

    // URL base para redirecionamentos
    const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://saveinmed.com.br'

    console.log('Base URL:', baseUrl)
    console.log('Environment NEXT_PUBLIC_APP_URL:', process.env.NEXT_PUBLIC_APP_URL)

    // Dados da preferência para o MercadoPago
    const preferenceData = {
      items: body.items.map((item: any) => ({
        title: item.title,
        description: item.description || '',
        quantity: item.quantity,
        unit_price: item.unit_price,
        currency_id: 'BRL'
      })),
      payer: {
        name: body.payer?.name || 'Cliente',
        email: body.payer?.email || 'cliente@exemplo.com',
      },
      back_urls: {
        success: `${baseUrl}/pagamento/mercadopago/sucesso`,
        failure: `${baseUrl}/pagamento/mercadopago/falha`,
        pending: `${baseUrl}/pagamento/mercadopago/pendente`
      },
      auto_return: 'approved',
      external_reference: body.external_reference,
      notification_url: `${baseUrl}/api/webhook/mercadopago`,
      statement_descriptor: body.statement_descriptor || 'SaveInMed',
      expires: true,
      expiration_date_from: new Date().toISOString(),
      expiration_date_to: new Date(Date.now() + 30 * 60 * 1000).toISOString(), // 30 minutos
      payment_methods: {
        excluded_payment_methods: [],
        excluded_payment_types: [
          {
            id: "ticket" // Remove boletos bancários
          }
        ],
        installments: 1 // Permitir apenas pagamento à vista
      }
    }

    console.log('Dados da preferência:', JSON.stringify(preferenceData, null, 2))

    // Chamar API do MercadoPago
    const response = await fetch('https://api.mercadopago.com/checkout/preferences', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(preferenceData)
    })

    const result = await response.json()

    if (!response.ok) {
      console.error('Erro do MercadoPago:', result)
      return NextResponse.json(
        { error: 'Erro ao criar preferência de pagamento', details: result },
        { status: response.status }
      )
    }

    // Retornar URLs de pagamento
    return NextResponse.json({
      id: result.id,
      init_point: result.init_point, // URL para ambiente de produção
      sandbox_init_point: result.sandbox_init_point, // URL para testes
      preference_id: result.id
    })

  } catch (error) {
    console.error('Erro ao processar preferência:', error)
    return NextResponse.json(
      { error: 'Erro interno do servidor' },
      { status: 500 }
    )
  }
}
