const Event = require('../../models/Event'); const { registrationHref } = require('../../utils/micrositeBuild'); const { generateConciergeResponse } = require('../conciergeCall2.service'); /** * registration: cards-first. Return a registration link card built from the * event's website/registration config. Falls back to Call 2 when no link can * be resolved (e.g. process-only questions). */ module.exports = async function registrationHandler({ plan, bot, event, session, turnLog }) { let ev = null; try { ev = await Event.findById(bot.event).select('website settings').lean(); } catch (err) { console.warn('[concierge][registration] event load failed:', err?.message || err); } const website = ev?.website || {}; const url = ev ? registrationHref({ _id: bot.event, website }, website) : ''; const settings = ev?.settings || {}; const isClosed = settings.registrationOpen === false; const deadline = settings.registrationDeadline ? new Date(settings.registrationDeadline).toISOString() : null; if (url) { const cards = [ { type: 'registration', data: { url, label: isClosed ? 'Registration closed' : 'Register now', open: !isClosed, deadline }, }, ]; const reply = isClosed ? `Registration is currently closed for ${event?.name || 'this event'}.` : `You can register for ${event?.name || 'this event'} using the button below.`; return { reply, cards, usedCall2: false }; } const call2 = await generateConciergeResponse({ bot, event, session, plan, turnLog }); return { reply: call2.reply, usedCall2: true, usage: call2.usage, modelId: call2.modelId }; };