import { z } from 'zod'
import { validateHTMLMessage } from './helpers'
export const regexPatternTemplateMessage =
'https?:\\/\\/[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(?:\\/[^/\\s]*)?'
export const regexLinkImageTemplateMessage =
/^(|https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)\/\S+\.(png|jpe?g))$/
export const maxLengthButtons = 9
export const maxLengthMessage = 3500
export const TemplateMessageButtonsSchema = z.object({
link: z.string()
.regex(new RegExp(regexPatternTemplateMessage), 'Invalid link format')
.max(250),
name: z.string()
.min(3)
.max(18),
id: z.string()
.min(1)
.max(36)
})
export const TemplateSchema = z.object({
link: z.string()
.max(250)
.regex(new RegExp(regexLinkImageTemplateMessage), 'Link must end with .png, .jpg, or .jpeg')
.optional()
.default(''),
template: z.string()
.min(1)
.max(maxLengthMessage)
.refine(value => validateHTMLMessage(value), { message: 'Template content is not valid for Telegram' }),
buttons: z.array(TemplateMessageButtonsSchema)
.max(maxLengthButtons)
})
export const TemplateMessageSchema = z.object({
id: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),
name: z.string().min(1).max(50),
sequenceNumber: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),
userId: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),
templateMessage: TemplateSchema,
createdAt: z.date(),
updatedAt: z.date()
})