const express = require('express'); const router = express.Router(); const { fetchJSON, uploadJSON } = require('../services/pixelbin'); const { generateTemplates } = require('../services/openai2'); const DEFAULT_EVENTS = require('../config/defaultEvents'); function slugify(text) { return text.toLowerCase().trim().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, ''); } // GET /api/events router.get('/', async (req, res) => { try { const data = await fetchJSON(`brands/${process.env.MERCHANT_ID}`, 'events'); res.json(data || { events: DEFAULT_EVENTS }); } catch (err) { res.status(500).json({ error: err.message }); } }); // POST /api/events — add custom event router.post('/', async (req, res) => { try { const { label } = req.body; if (!label) return res.status(400).json({ error: 'label is required' }); const folder = `brands/${process.env.MERCHANT_ID}`; const data = await fetchJSON(folder, 'events') || { events: [...DEFAULT_EVENTS] }; const slug = slugify(label); if (data.events.some(e => e.slug === slug)) { return res.status(409).json({ error: 'An event with this name already exists' }); } const newEvent = { slug, label, isDefault: false }; data.events.push(newEvent); await uploadJSON(folder, 'events', data); res.json(newEvent); } catch (err) { res.status(500).json({ error: err.message }); } }); // DELETE /api/events/:slug router.delete('/:slug', async (req, res) => { try { const { slug } = req.params; const folder = `brands/${process.env.MERCHANT_ID}`; const data = await fetchJSON(folder, 'events') || { events: [...DEFAULT_EVENTS] }; const event = data.events.find(e => e.slug === slug); if (!event) return res.status(404).json({ error: 'Event not found' }); if (event.isDefault) return res.status(403).json({ error: 'Cannot delete a default event' }); data.events = data.events.filter(e => e.slug !== slug); await uploadJSON(folder, 'events', data); res.json({ ok: true }); } catch (err) { res.status(500).json({ error: err.message }); } }); // POST /api/events/:slug/generate router.post('/:slug/generate', async (req, res) => { try { const { slug } = req.params; const folder = `brands/${process.env.MERCHANT_ID}`; const context = await fetchJSON(folder, 'context'); if (!context) return res.status(400).json({ error: 'Register your business before generating templates.' }); const eventsData = await fetchJSON(folder, 'events') || { events: DEFAULT_EVENTS }; const event = eventsData.events.find(e => e.slug === slug); if (!event) return res.status(404).json({ error: 'Event not found' }); const variants = await generateTemplates(context, slug, event.label); const templateJson = { eventSlug: slug, eventLabel: event.label, generatedVariants: variants, approvedVariant: null, whitelistStatus: 'pending', rawCurl: '', processedCurl: '', variableMap: {}, selectedImagePath: '', updatedAt: new Date().toISOString(), }; await uploadJSON(`${folder}/templates`, slug, templateJson); res.json({ variants }); } catch (err) { console.error('Generate error:', err.message); res.status(500).json({ error: err.message }); } }); module.exports = router;