import { answersByTemplateIndex, submissionUpdateText, type NormalizedSubmissionAnswer, type OldAnswersByQuestionId, type SubmissionQuestion, } from "@/lib/form/submission-intake"; const NEW_SUBMISSION_TEMPLATE = "New submission from {username} ({id})."; const UPDATED_SUBMISSION_TEMPLATE = "Submission updated by {username} ({id}).\n{update}"; type SubmissionWebhookMessageOptions = { template: string | null; isUpdate: boolean; userName: string | null | undefined; discordId: string; submissionLink: string; questions: SubmissionQuestion[]; answers: NormalizedSubmissionAnswer[]; oldAnswersByQuestionId: OldAnswersByQuestionId; }; export function submissionWebhookMessage({ template, isUpdate, userName, discordId, submissionLink, questions, answers, oldAnswersByQuestionId, }: SubmissionWebhookMessageOptions) { const answersByIndex = answersByTemplateIndex(questions, answers); const updatesText = isUpdate ? submissionUpdateText(questions, answers, oldAnswersByQuestionId) : ""; const messageTemplate = template?.trim() || (isUpdate ? UPDATED_SUBMISSION_TEMPLATE : NEW_SUBMISSION_TEMPLATE); return messageTemplate.replace(/\{([^}]+)\}/g, (_match, variable: string) => { const key = variable.toLowerCase(); if (key === "username" || key === "displayname") { return userName || "Unknown User"; } if (key === "id") { return discordId; } if (key === "link") { return submissionLink; } if (key === "update") { return updatesText; } return answersByIndex[variable] || "Not Provided"; }); }