import { PRESENCE_EVT as e } from "./call.constants"
export const getEmptyMemberPresence = ({ memberId: e, swarmId: t }) => ({
memberId: e,
swarmId: t,
streamByName: {},
})
export const getEmptyMemberMedia = ({ swarmId: e, memberId: t }) => ({
id: e,
memberId: t,
streamByName: {},
})
export const hasStreamEverAdded = ({ streamId: t }, r) =>
!(
!t ||
!Array.isArray(r) ||
r.length < 1 ||
!r.find((r) => r?.type === e.ADD_STREAM && r?.streamId === t)
)
export const memberHasMedia = (e, t) => {
const r = t[e]?.streamByName || {}
return Object.keys(r).length > 0
}
export const getNextPositionPreservedList = (e, t) => {
const r = [],
s = [],
c = e.length === t.length
let n = c
return (
e.forEach((e, c) => {
const o = t.findIndex((t) => t.swarmId === e.swarmId)
o > -1 ? (s.push(e), t.splice(o, 1)) : ((n = !1), s.push(void 0), r.push(c))
}),
n
? e
: (r.forEach((e) => {
s[e] = t.pop()
}),
c ? s : (t.forEach((e) => s.push(e)), s.filter((e) => void 0 !== e)))
)
}
export const getMyDeviceId = (e) => e?.self?.deviceId || null
export const isDeviceInCall = (e, t) =>
e?.members?.some((e) => e.devices?.some((e) => e.deviceId === t)) || !1
export const createEmptyPresenceEntry = (e) => ({ swarmId: e, activityScore: 0 })
export const mergeActivePresences = (e, t, r) => {
const s = t.map((e) => r[e] || e),
c = new Set(s),
n = e.filter((e) => c.has(e.swarmId)),
o = new Set(n.map((e) => e.swarmId))
return [...n, ...s.filter((e) => !o.has(e)).map(createEmptyPresenceEntry)]
}
export const calcActivityScore = (e, t) => (!1 !== e ? 0 : 1) + (!1 !== t ? 0 : 0.5)
export const updatePresencesSortedByActivity = (e, t, r, s) => {
const c = calcActivityScore(r, s),
n = [...e.presencesSortedByActivity],
o = n.find((e) => e.swarmId === t)
if (o && o.activityScore === c) return e.presencesSortedByActivity
const i = { swarmId: t, activityScore: c },
d = n.findIndex((e) => e.swarmId === i.swarmId)
;-1 !== d && n.splice(d, 1)
let m = n.findIndex((e) => e.activityScore <= i.activityScore)
return (-1 === m && (m = n.length), n.splice(m, 0, i), n)
}
export const removeFromPresencesSortedByActivity = (e, t) => {
const r = e.presencesSortedByActivity.filter((e) => e.swarmId !== t)
return r.length === e.presencesSortedByActivity.length ? e.presencesSortedByActivity : r
}