import { NextRequest, NextResponse } from 'next/server'; export async function POST(req: NextRequest) { try { const { campaignName, subject, htmlContent, scheduledAt, updateExisting = false, existingCampaignId } = await req.json(); if (!htmlContent) { return NextResponse.json( { error: 'Chýba povinné pole htmlContent.' }, { status: 400 } ); } const apiKey = process.env.BREVO_API_KEY; const senderName = process.env.BREVO_SENDER_NAME || 'Jakub Hostačný (COOP Newsletter)'; const senderEmail = process.env.BREVO_SENDER_EMAIL || 'tomas.rafay@jandl.sk'; if (!apiKey) { return NextResponse.json( { error: 'BREVO_API_KEY nie je nakonfigurovaný na serveri.' }, { status: 500 } ); } // 1. Ak je zadané updateExisting a máme existujúce ID, skúsime aktualizovať existujúcu kampaň if (updateExisting && existingCampaignId) { const updatePayload: any = { name: campaignName, subject: subject, sender: { name: senderName, email: senderEmail }, htmlContent: htmlContent }; if (scheduledAt) { updatePayload.scheduledAt = scheduledAt; } const updateRes = await fetch( `https://api.brevo.com/v3/emailCampaigns/${encodeURIComponent(existingCampaignId)}`, { method: 'PUT', headers: { 'accept': 'application/json', 'content-type': 'application/json', 'api-key': apiKey }, body: JSON.stringify(updatePayload) } ); if (updateRes.ok || updateRes.status === 204) { return NextResponse.json({ success: true, updated: true, campaignId: Number(existingCampaignId), brevoUrl: 'https://app.brevo.com/campaigns/listing', brevoListingUrl: 'https://app.brevo.com/campaigns/listing', message: 'Kampaň bola úspešne aktualizovaná v Brevo!' }); } // Ak aktualizácia zlyhala (napr. kampaň už bola odoslaná alebo neexistuje), vytvoríme novú console.warn(`Update failed on campaign ${existingCampaignId}, creating a new one instead.`); } // 2. Vytvorenie novej kampane v Brevo const createPayload: any = { name: campaignName || 'COOP Jednota Newsletter', subject: subject || 'COOP Jednota Newsletter', sender: { name: senderName, email: senderEmail }, type: 'classic', htmlContent: htmlContent }; if (scheduledAt) { createPayload.scheduledAt = scheduledAt; } const brevoRes = await fetch('https://api.brevo.com/v3/emailCampaigns', { method: 'POST', headers: { 'accept': 'application/json', 'content-type': 'application/json', 'api-key': apiKey }, body: JSON.stringify(createPayload) }); const data = await brevoRes.json(); if (!brevoRes.ok) { console.error('Brevo API error:', data); return NextResponse.json( { error: data.message || 'Chyba pri vytváraní kampane v Brevo', details: data }, { status: brevoRes.status } ); } return NextResponse.json({ success: true, updated: false, campaignId: data.id, brevoUrl: 'https://app.brevo.com/campaigns/listing', brevoListingUrl: 'https://app.brevo.com/campaigns/listing', message: 'Kampaň bola úspešne vytvorená v Brevo!' }); } catch (error: any) { console.error('Export to Brevo error:', error); return NextResponse.json( { error: error.message || 'Interná chyba servera' }, { status: 500 } ); } }