"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sendTestEmailSchema = exports.validateTemplateSchema = exports.rollbackToVersionSchema = exports.updateEmailTemplateSchema = exports.createEmailTemplateSchema = exports.listEmailTemplatesSchema = exports.emailTemplateVariableSchema = exports.EmailTemplateVariableTypeSchema = void 0; const zod_1 = require("zod"); const client_1 = require("@prisma/client"); // Variable type enum exports.EmailTemplateVariableTypeSchema = zod_1.z.enum(['TEXT', 'VIDEO']); // Variable schema exports.emailTemplateVariableSchema = zod_1.z.object({ key: zod_1.z.string().regex(/^[A-Z_]+$/, 'Variable key must be uppercase letters and underscores'), label: zod_1.z.string().min(1).max(100), description: zod_1.z.string().max(500).optional(), type: exports.EmailTemplateVariableTypeSchema.default('TEXT'), videoId: zod_1.z.number().int().positive().optional(), isRequired: zod_1.z.boolean().default(true), isConditional: zod_1.z.boolean().default(false), sampleValue: zod_1.z.string().max(1000).optional(), sortOrder: zod_1.z.number().int().min(0).default(0), }).refine((data) => { // VIDEO type must have videoId if (data.type === 'VIDEO' && !data.videoId) { return false; } return true; }, { message: 'VIDEO variables must have a videoId', path: ['videoId'] }); // List templates exports.listEmailTemplatesSchema = zod_1.z.object({ page: zod_1.z.coerce.number().int().min(1).default(1), limit: zod_1.z.coerce.number().int().min(1).max(100).default(20), search: zod_1.z.string().max(200).optional(), category: zod_1.z.nativeEnum(client_1.EmailTemplateCategory).optional(), isActive: zod_1.z.coerce.boolean().optional(), }); // Create template exports.createEmailTemplateSchema = zod_1.z.object({ key: zod_1.z.string().regex(/^[a-z0-9-]+$/, 'Template key must be lowercase alphanumeric with hyphens').min(1).max(100), name: zod_1.z.string().min(1).max(200), description: zod_1.z.string().max(1000).optional(), category: zod_1.z.nativeEnum(client_1.EmailTemplateCategory), subjectLine: zod_1.z.string().min(1).max(500), htmlContent: zod_1.z.string().min(1).max(100000, 'HTML content exceeds 100KB limit'), textContent: zod_1.z.string().min(1).max(50000, 'Text content exceeds 50KB limit'), isActive: zod_1.z.boolean().default(true), variables: zod_1.z.array(exports.emailTemplateVariableSchema).optional(), }); // Update template exports.updateEmailTemplateSchema = zod_1.z.object({ name: zod_1.z.string().min(1).max(200).optional(), description: zod_1.z.string().max(1000).optional().nullable(), category: zod_1.z.nativeEnum(client_1.EmailTemplateCategory).optional(), subjectLine: zod_1.z.string().min(1).max(500).optional(), htmlContent: zod_1.z.string().min(1).max(100000, 'HTML content exceeds 100KB limit').optional(), textContent: zod_1.z.string().min(1).max(50000, 'Text content exceeds 50KB limit').optional(), isActive: zod_1.z.boolean().optional(), variables: zod_1.z.array(exports.emailTemplateVariableSchema).optional(), }); // Rollback to version exports.rollbackToVersionSchema = zod_1.z.object({ versionNumber: zod_1.z.number().int().min(1), changeNotes: zod_1.z.string().max(500).optional(), }); // Validate template exports.validateTemplateSchema = zod_1.z.object({ htmlContent: zod_1.z.string().min(1).max(100000), textContent: zod_1.z.string().min(1).max(50000), subjectLine: zod_1.z.string().min(1).max(500).optional(), }); // Send test email exports.sendTestEmailSchema = zod_1.z.object({ recipientEmail: zod_1.z.string().email('Invalid email address').max(255), testData: zod_1.z.record(zod_1.z.string(), zod_1.z.string()), }); //# sourceMappingURL=email-templates.schemas.js.map