function u(e, i, t) {
  const s = [], a = `chats[${i}].actions[${t}]`;
  return typeof e != "object" || e === null ? (s.push({ path: a, message: "Action должен быть объектом", value: e }), s) : ((!e.action || typeof e.action != "string") && s.push({ path: `${a}.action`, message: "Поле action обязательно и должно быть строкой", value: e.action }), (!e.title || typeof e.title != "string") && s.push({ path: `${a}.title`, message: "Поле title обязательно и должно быть строкой", value: e.title }), e.icon !== void 0 && typeof e.icon != "string" && s.push({ path: `${a}.icon`, message: "Поле icon должно быть строкой", value: e.icon }), s);
}
function p(e, i, t) {
  const s = [], a = `chats[${i}].contact.attributes[${t}]`;
  return typeof e != "object" || e === null ? (s.push({ path: a, message: "Атрибут контакта должен быть объектом", value: e }), s) : ((!e.id || typeof e.id != "string") && s.push({ path: `${a}.id`, message: "Поле id обязательно и должно быть строкой", value: e.id }), e.type !== void 0 && typeof e.type != "string" && s.push({ path: `${a}.type`, message: "Поле type должно быть строкой", value: e.type }), e.data !== void 0 && (typeof e.data != "string" && typeof e.data != "object" ? s.push({ path: `${a}.data`, message: "Поле data должно быть строкой или объектом", value: e.data }) : typeof e.data == "object" && ((!e.data.id || typeof e.data.id != "string") && s.push({ path: `${a}.data.id`, message: "Поле data.id должно быть строкой", value: e.data.id }), (!e.data.nickname || typeof e.data.nickname != "string") && s.push({ path: `${a}.data.nickname`, message: "Поле data.nickname должно быть строкой", value: e.data.nickname }), (!e.data.phone || typeof e.data.phone != "string") && s.push({ path: `${a}.data.phone`, message: "Поле data.phone должно быть строкой", value: e.data.phone }))), (!e.value || typeof e.value != "string") && s.push({ path: `${a}.value`, message: "Поле value обязательно и должно быть строкой", value: e.value }), e.status !== void 0 && (typeof e.status != "string" || !["confirmed", "unconfirmed"].includes(e.status)) && s.push({
    path: `${a}.status`,
    message: 'Поле status должно быть "confirmed" или "unconfirmed"',
    value: e.status
  }), s);
}
function o(e, i) {
  const t = [], s = `chats[${i}].contact`;
  return typeof e != "object" || e === null ? (t.push({ path: s, message: "Contact должен быть объектом", value: e }), t) : e.attributes !== void 0 && !Array.isArray(e.attributes) ? (t.push({ path: `${s}.attributes`, message: "Поле attributes должно быть массивом", value: e.attributes }), t) : (e.attributes && e.attributes.forEach((a, n) => {
    t.push(...p(a, i, n));
  }), t);
}
function d(e, i, t) {
  const s = [], a = `chats[${i}].dialogs[${t}]`;
  return typeof e != "object" || e === null ? (s.push({ path: a, message: "Диалог должен быть объектом", value: e }), s) : ((!e.dialogId || typeof e.dialogId != "string") && s.push({ path: `${a}.dialogId`, message: "Поле dialogId обязательно и должно быть строкой", value: e.dialogId }), (!e.name || typeof e.name != "string") && s.push({ path: `${a}.name`, message: "Поле name обязательно и должно быть строкой", value: e.name }), e["lastActivity.timestamp"] === void 0 ? s.push({ path: `${a}['lastActivity.timestamp']`, message: "Поле lastActivity.timestamp обязательно", value: e["lastActivity.timestamp"] }) : typeof e["lastActivity.timestamp"] != "number" && s.push({ path: `${a}['lastActivity.timestamp']`, message: "Поле lastActivity.timestamp должно быть числом", value: e["lastActivity.timestamp"] }), (e.isSelected === void 0 || typeof e.isSelected != "boolean") && s.push({ path: `${a}.isSelected`, message: "Поле isSelected обязательно и должно быть boolean", value: e.isSelected }), e.branchId !== void 0 && typeof e.branchId != "string" && s.push({ path: `${a}.branchId`, message: "Поле branchId должно быть строкой", value: e.branchId }), e.attributeId !== void 0 && typeof e.attributeId != "string" && s.push({ path: `${a}.attributeId`, message: "Поле attributeId должно быть строкой", value: e.attributeId }), e.channelId !== void 0 && typeof e.channelId != "string" && s.push({ path: `${a}.channelId`, message: "Поле channelId должно быть строкой", value: e.channelId }), e.icon !== void 0 && typeof e.icon != "string" && s.push({ path: `${a}.icon`, message: "Поле icon должно быть строкой", value: e.icon }), e.fullname !== void 0 && typeof e.fullname != "string" && s.push({ path: `${a}.fullname`, message: "Поле fullname должно быть строкой", value: e.fullname }), e.countUnread !== void 0 && typeof e.countUnread != "number" && s.push({ path: `${a}.countUnread`, message: "Поле countUnread должно быть числом", value: e.countUnread }), e["lastActivity.time"] !== void 0 && typeof e["lastActivity.time"] != "string" && s.push({ path: `${a}['lastActivity.time']`, message: "Поле lastActivity.time должно быть строкой", value: e["lastActivity.time"] }), s);
}
function l(e, i) {
  const t = [], s = `chats[${i}]`;
  if (typeof e != "object" || e === null)
    return t.push({ path: s, message: "Чат должен быть объектом", value: e }), t;
  if ((e.chatId === void 0 || typeof e.chatId != "string") && t.push({ path: `${s}.chatId`, message: "Поле chatId обязательно и должно быть строкой", value: e.chatId }), (!e.name || typeof e.name != "string") && t.push({ path: `${s}.name`, message: "Поле name обязательно и должно быть строкой", value: e.name }), e.countUnread === void 0 || typeof e.countUnread != "number" ? t.push({ path: `${s}.countUnread`, message: "Поле countUnread обязательно и должно быть числом", value: e.countUnread }) : e.countUnread < 0 && t.push({ path: `${s}.countUnread`, message: "Поле countUnread не может быть отрицательным", value: e.countUnread }), (!e.lastMessage || typeof e.lastMessage != "string") && t.push({ path: `${s}.lastMessage`, message: "Поле lastMessage обязательно и должно быть строкой", value: e.lastMessage }), (!e["lastActivity.timestamp"] || typeof e["lastActivity.timestamp"] != "number") && t.push({ path: `${s}['lastActivity.timestamp']`, message: "Поле lastActivity.timestamp обязательно и должно быть числом", value: e["lastActivity.timestamp"] }), e.avatar !== void 0 && typeof e.avatar != "string" && t.push({ path: `${s}.avatar`, message: "Поле avatar должно быть строкой", value: e.avatar }), e["lastActivity.time"] !== void 0 && typeof e["lastActivity.time"] != "string" && t.push({ path: `${s}['lastActivity.time']`, message: "Поле lastActivity.time должно быть строкой", value: e["lastActivity.time"] }), e["lastMessage.status"] !== void 0) {
    const a = ["read", "sent", "received"];
    a.includes(e["lastMessage.status"]) || t.push({
      path: `${s}['lastMessage.status']`,
      message: `Поле lastMessage.status должно быть одним из: ${a.join(", ")}`,
      value: e["lastMessage.status"]
    });
  }
  return e.isFixedTop !== void 0 && typeof e.isFixedTop != "boolean" && t.push({ path: `${s}.isFixedTop`, message: "Поле isFixedTop должно быть boolean", value: e.isFixedTop }), e.isFixedBottom !== void 0 && typeof e.isFixedBottom != "boolean" && t.push({ path: `${s}.isFixedBottom`, message: "Поле isFixedBottom должно быть boolean", value: e.isFixedBottom }), e.isFixed !== void 0 && typeof e.isFixed != "boolean" && t.push({ path: `${s}.isFixed`, message: "Поле isFixed должно быть boolean", value: e.isFixed }), e.status !== void 0 && typeof e.status != "string" && t.push({ path: `${s}.status`, message: "Поле status должно быть строкой", value: e.status }), e.statusMessage !== void 0 && typeof e.statusMessage != "string" && t.push({ path: `${s}.statusMessage`, message: "Поле statusMessage должно быть строкой", value: e.statusMessage }), e.colorUnread !== void 0 && typeof e.colorUnread != "string" && t.push({ path: `${s}.colorUnread`, message: "Поле colorUnread должно быть строкой", value: e.colorUnread }), e.typing !== void 0 && typeof e.typing != "boolean" && t.push({ path: `${s}.typing`, message: "Поле typing должно быть boolean", value: e.typing }), e.metadata !== void 0 && typeof e.metadata != "string" && t.push({ path: `${s}.metadata`, message: "Поле metadata должно быть строкой", value: e.metadata }), e.dialogsExpanded !== void 0 && typeof e.dialogsExpanded != "boolean" && t.push({ path: `${s}.dialogsExpanded`, message: "Поле dialogsExpanded должно быть boolean", value: e.dialogsExpanded }), e.actions !== void 0 && (Array.isArray(e.actions) ? e.actions.forEach((a, n) => {
    t.push(...u(a, i, n));
  }) : t.push({ path: `${s}.actions`, message: "Поле actions должно быть массивом", value: e.actions })), e.dialogs !== void 0 && (Array.isArray(e.dialogs) ? e.dialogs.forEach((a, n) => {
    t.push(...d(a, i, n));
  }) : t.push({ path: `${s}.dialogs`, message: "Поле dialogs должно быть массивом", value: e.dialogs })), e.contact !== void 0 && t.push(...o(e.contact, i)), t;
}
function f(e) {
  const i = [], t = [];
  if (!Array.isArray(e))
    return {
      isValid: !1,
      errors: [{ path: "chats", message: "Данные должны быть массивом", value: e }],
      warnings: []
    };
  e.length === 0 && t.push({ path: "chats", message: "Массив чатов пустой" });
  const s = /* @__PURE__ */ new Set();
  return e.forEach((a, n) => {
    a && typeof a == "object" && a.chatId !== void 0 && (s.has(a.chatId) ? i.push({
      path: `chats[${n}].chatId`,
      message: "Дублирующийся chatId",
      value: a.chatId
    }) : s.add(a.chatId));
  }), e.forEach((a, n) => {
    i.push(...l(a, n));
  }), {
    isValid: i.length === 0,
    errors: i,
    warnings: t
  };
}
function r(e) {
  const i = [];
  return i.push(`=== РЕЗУЛЬТАТ ВАЛИДАЦИИ ЧАТОВ ===
`), e.isValid ? i.push(`✅ Данные валидны!
`) : i.push(`❌ Обнаружены ошибки!
`), e.errors.length > 0 && (i.push(`
🔴 ОШИБКИ (${e.errors.length}):`), e.errors.forEach((t, s) => {
    i.push(`  ${s + 1}. [${t.path}] ${t.message}`), t.value !== void 0 && i.push(`     Значение: ${JSON.stringify(t.value)}`);
  })), e.warnings.length > 0 && (i.push(`
⚠️  ПРЕДУПРЕЖДЕНИЯ (${e.warnings.length}):`), e.warnings.forEach((t, s) => {
    i.push(`  ${s + 1}. [${t.path}] ${t.message}`), t.value !== void 0 && i.push(`     Значение: ${JSON.stringify(t.value)}`);
  })), i.push(`
` + "=".repeat(35)), i.join(`
`);
}
export {
  r as getValidationReport,
  f as validateChats
};
