import { NextResponse } from 'next/server';

export const runtime = 'edge';

export async function GET(request: Request) {
    try {
        const { searchParams } = new URL(request.url);
        const paymentId = searchParams.get('id');
        const externalReference = searchParams.get('external_reference');

        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 do Mercado Pago ausente' },
                { status: 500 }
            );
        }

        const headers = {
            Authorization: `Bearer ${accessToken}`,
            'Content-Type': 'application/json'
        };

        let endpoint = '';

        if (paymentId) {
            endpoint = `https://api.mercadopago.com/v1/payments/${paymentId}`;
        } else if (externalReference) {
            // Busca por external_reference
            endpoint = `https://api.mercadopago.com/v1/payments/search?external_reference=${externalReference}&sort=date_created&criteria=desc`;
        } else {
            return NextResponse.json(
                { error: 'ID do pagamento ou referência externa obrigatórios' },
                { status: 400 }
            );
        }

        console.log(`🔍 Verificando pagamento via Mercado Pago API: ${endpoint}`);

        const response = await fetch(endpoint, {
            method: 'GET',
            headers
        });

        const data = await response.json();

        if (!response.ok) {
            console.error('Erro na API do Mercado Pago:', data);
            return NextResponse.json(
                { error: data.message || 'Erro ao verificar pagamento', details: data },
                { status: response.status }
            );
        }

        // Se for busca por referência, pegar o último pagamento (o endpoint de search retorna uma lista em 'results')
        if (externalReference && data.results) {
            if (data.results.length > 0) {
                const latestPayment = data.results[0];
                return NextResponse.json({
                    success: true,
                    data: {
                        has_payment: true,
                        is_approved: latestPayment.status === 'approved',
                        status: latestPayment.status,
                        latest_payment: latestPayment
                    }
                });
            } else {
                return NextResponse.json({
                    success: true,
                    data: {
                        has_payment: false,
                        is_approved: false,
                        status: 'pending',
                        latest_payment: null
                    }
                });
            }
        }

        // Se for busca por ID direto
        return NextResponse.json({
            success: true,
            data: {
                has_payment: true,
                is_approved: data.status === 'approved',
                status: data.status,
                latest_payment: data
            }
        });

    } catch (error) {
        console.error('Erro interno ao verificar pagamento:', error);
        return NextResponse.json(
            { error: 'Erro interno ao verificar pagamento' },
            { status: 500 }
        );
    }
}
