import { all as e, select as r } from "redux-saga/effects"
import { getCoreBackend as t } from "../../../backend"
import { apiCall as m } from "../../../api/core"
import { getMyMemberId as o, getMemberBlockedByIdMap as s } from "../../identity"
import {
parseMemberResponse as i,
disableMemberCapabilities as a,
getMemberById as d,
canModerate as c,
} from "../../member"
import { getChatMessageFilters as n } from "../init"
import { getReportedFromReactions as p } from "../reaction/chat-reaction.model"
import { displayReplaceMention as l } from "./message-parser"
import { getIsMessageHidden as b, parseMessage as f } from "./message"
export function* chatGetMessageRender({
roomId: r,
message: o,
memberData: s,
blockedMembers: d,
disabledCapabilities: c,
memberLimit: n = 10,
}) {
let p = i(s)
c && (p = a(p))
const b = !!d.find(({ memberId: e }) => e === o.memberId)
let f = o.chat?.text,
g = o.chat?.display
if (!b && f && o.chat.mentions?.length) {
const s = o.chat.mentions.slice(0, n),
i = t()
;(yield e(s.map((e) => m(i.getMember, r, e.memberId, { includeAvatar: !1 })))).forEach((e) => {
const { memberId: r, displayName: t } = e,
m = l({ text: f, display: g }, r, t)
;((f = m.text), (g = m.display))
})
}
return { member: p, isBlocked: b, messageText: f, messageDisplay: g }
}
export function* chatMessagesTransform({ roomId: t, ignoreBlocked: m, coreEvents: i }) {
const [a, l, g, h] = yield e([r(s), r(o), r(d(t)), r(n)]),
y = [],
I = []
let u = -1
for (const e of i) {
const r = !!a[e.memberId] && !m,
t = l ? l === e.memberId : void 0
t && e.read && e.seq > u && (u = e.seq)
const o = g[e.memberId],
s = c(o?.capabilities),
{ reported: i, reportedByMe: d } = s ? { reported: !1, reportedByMe: !1 } : p(e.reactions),
{ message: n, files: x } = f(e, {
memberById: g,
blocked: r,
local: t,
hidden: b(e, h),
reported: i,
reportedByMe: d,
})
;(y.push(n), I.push(...x))
}
return [y, I, u]
}