function n(t, s, e) {
  const i = [], a = `messages[${s}].actions[${e}]`;
  return typeof t != "object" || t === null ? (i.push({ path: a, message: "Action должен быть объектом", value: t }), i) : ((!t.action || typeof t.action != "string") && i.push({ path: `${a}.action`, message: "Поле action обязательно и должно быть строкой", value: t.action }), (!t.title || typeof t.title != "string") && i.push({ path: `${a}.title`, message: "Поле title обязательно и должно быть строкой", value: t.title }), t.icon !== void 0 && typeof t.icon != "string" && i.push({ path: `${a}.icon`, message: "Поле icon должно быть строкой", value: t.icon }), i);
}
function h(t, s) {
  const e = [], i = `messages[${s}].reply`;
  return typeof t != "object" || t === null ? (e.push({ path: i, message: "Reply должен быть объектом", value: t }), e) : (t.messageId === void 0 ? e.push({ path: `${i}.messageId`, message: "Поле messageId обязательно", value: t.messageId }) : typeof t.messageId != "string" && typeof t.messageId != "number" && e.push({ path: `${i}.messageId`, message: "Поле messageId должно быть строкой или числом", value: t.messageId }), (!t.type || typeof t.type != "string") && e.push({ path: `${i}.type`, message: "Поле type обязательно и должно быть строкой", value: t.type }), t.text !== void 0 && typeof t.text != "string" && e.push({ path: `${i}.text`, message: "Поле text должно быть строкой", value: t.text }), t.url !== void 0 && typeof t.url != "string" && e.push({ path: `${i}.url`, message: "Поле url должно быть строкой", value: t.url }), t.filename !== void 0 && typeof t.filename != "string" && e.push({ path: `${i}.filename`, message: "Поле filename должно быть строкой", value: t.filename }), e);
}
function f(t, s) {
  const e = [], i = `messages[${s}]`;
  if (typeof t != "object" || t === null)
    return e.push({ path: i, message: "Сообщение должно быть объектом", value: t }), e;
  if (t.chatId !== void 0 && typeof t.chatId != "string" && e.push({ path: `${i}.chatId`, message: "Поле chatId должно быть строкой", value: t.chatId }), t.type !== "system.date" && (t.messageId === void 0 ? e.push({ path: `${i}.messageId`, message: "Поле messageId обязательно", value: t.messageId }) : typeof t.messageId != "string" && typeof t.messageId != "number" && e.push({ path: `${i}.messageId`, message: "Поле messageId должно быть строкой или числом", value: t.messageId })), (!t.type || typeof t.type != "string") && e.push({ path: `${i}.type`, message: "Поле type обязательно и должно быть строкой", value: t.type }), t.type !== "system.date" && (t.timestamp === void 0 ? e.push({ path: `${i}.timestamp`, message: "Поле timestamp обязательно", value: t.timestamp }) : typeof t.timestamp != "string" && typeof t.timestamp != "number" && e.push({ path: `${i}.timestamp`, message: "Поле timestamp должно быть строкой или числом", value: t.timestamp })), t.dialogId !== void 0 && typeof t.dialogId != "string" && e.push({ path: `${i}.dialogId`, message: "Поле dialogId должно быть строкой", value: t.dialogId }), t.direction !== void 0) {
    const a = ["incoming", "outgoing"];
    a.includes(t.direction) || e.push({
      path: `${i}.direction`,
      message: `Поле direction должно быть одним из: ${a.join(", ")}`,
      value: t.direction
    });
  }
  if (t.status !== void 0) {
    const a = ["read", "sent", "received"];
    a.includes(t.status) || e.push({
      path: `${i}.status`,
      message: `Поле status должно быть одним из: ${a.join(", ")}`,
      value: t.status
    });
  }
  return t.text !== void 0 && typeof t.text != "string" && e.push({ path: `${i}.text`, message: "Поле text должно быть строкой", value: t.text }), t.header !== void 0 && typeof t.header != "string" && e.push({ path: `${i}.header`, message: "Поле header должно быть строкой", value: t.header }), t.subText !== void 0 && typeof t.subText != "string" && e.push({ path: `${i}.subText`, message: "Поле subText должно быть строкой", value: t.subText }), t.avatar !== void 0 && typeof t.avatar != "string" && e.push({ path: `${i}.avatar`, message: "Поле avatar должно быть строкой", value: t.avatar }), t.url !== void 0 && typeof t.url != "string" && e.push({ path: `${i}.url`, message: "Поле url должно быть строкой", value: t.url }), t.filename !== void 0 && typeof t.filename != "string" && e.push({ path: `${i}.filename`, message: "Поле filename должно быть строкой", value: t.filename }), t.views !== void 0 && typeof t.views != "number" && e.push({ path: `${i}.views`, message: "Поле views должно быть числом", value: t.views }), t.actions !== void 0 && (Array.isArray(t.actions) ? t.actions.forEach((a, p) => {
    e.push(...n(a, s, p));
  }) : e.push({ path: `${i}.actions`, message: "Поле actions должно быть массивом", value: t.actions })), t.reply !== void 0 && e.push(...h(t.reply, s)), t.embed !== void 0 && (typeof t.embed != "object" || t.embed === null ? e.push({ path: `${i}.embed`, message: "Поле embed должно быть объектом", value: t.embed }) : ((!t.embed.type || typeof t.embed.type != "string") && e.push({ path: `${i}.embed.type`, message: "Поле embed.type обязательно и должно быть строкой", value: t.embed.type }), (!t.embed.url || typeof t.embed.url != "string") && e.push({ path: `${i}.embed.url`, message: "Поле embed.url обязательно и должно быть строкой", value: t.embed.url }))), e;
}
function l(t) {
  const s = [], e = [];
  if (!Array.isArray(t))
    return {
      isValid: !1,
      errors: [{ path: "messages", message: "Данные должны быть массивом", value: t }],
      warnings: []
    };
  t.length === 0 && e.push({ path: "messages", message: "Массив сообщений пустой" });
  const i = /* @__PURE__ */ new Map();
  return t.forEach((a, p) => {
    if (a && typeof a == "object" && a.chatId !== void 0 && a.messageId !== void 0) {
      const u = a.dialogId ? `${a.chatId}:${a.dialogId}` : `${a.chatId}`;
      i.has(u) || i.set(u, /* @__PURE__ */ new Set());
      const o = i.get(u);
      if (o.has(a.messageId)) {
        const d = a.dialogId ? `в чате ${a.chatId}, диалоге ${a.dialogId}` : `в чате ${a.chatId}`;
        s.push({
          path: `messages[${p}].messageId`,
          message: `Дублирующийся messageId ${d}`,
          value: a.messageId
        });
      } else
        o.add(a.messageId);
    }
  }), t.forEach((a, p) => {
    s.push(...f(a, p));
  }), {
    isValid: s.length === 0,
    errors: s,
    warnings: e
  };
}
function r(t) {
  const s = [];
  return s.push(`=== РЕЗУЛЬТАТ ВАЛИДАЦИИ СООБЩЕНИЙ ===
`), t.isValid ? s.push(`✅ Данные валидны!
`) : s.push(`❌ Обнаружены ошибки!
`), t.errors.length > 0 && (s.push(`
🔴 ОШИБКИ (${t.errors.length}):`), t.errors.forEach((e, i) => {
    s.push(`  ${i + 1}. [${e.path}] ${e.message}`), e.value !== void 0 && s.push(`     Значение: ${JSON.stringify(e.value)}`);
  })), t.warnings.length > 0 && (s.push(`
⚠️  ПРЕДУПРЕЖДЕНИЯ (${t.warnings.length}):`), t.warnings.forEach((e, i) => {
    s.push(`  ${i + 1}. [${e.path}] ${e.message}`), e.value !== void 0 && s.push(`     Значение: ${JSON.stringify(e.value)}`);
  })), s.push(`
` + "=".repeat(40)), s.join(`
`);
}
export {
  r as getMessageValidationReport,
  l as validateMessages
};
