import { takeLeading as o, setContext as t, getContext as n, all as e } from "redux-saga/effects"
import { ENV_CONTEXT_KEY as i } from "../../constants"
import {
joinRoomSubmit as a,
setPairingRoom as s,
clearPairingRoom as d,
addOrRemoveRecentRoom as r,
PAIRING_STATUS as m,
RECENT_ROOM_UPDATE as l,
} from "../../room"
import {
TIME_CONTEXT_KEY as c,
takeStep as f,
sequence as u,
step as y,
printFlow as p,
createTimeContext as g,
parallel as D,
} from "./flow.model"
const R = () => (o) => !!s.match(o) && o.payload.status === m.ASKED,
h = () => (o) => r.match(o) && o.payload.type === l.ADDED,
E = (o) => (t) => {
if (!d.match(t)) return !1
const { seedId: n, status: e } = t.payload
return e === m.COMPLETED && o === n
}
export function* statsJoinRoomSaga(o) {
let n
if ((yield t({ [c]: g() }), a.match(o))) {
const o = Date.now()
;(yield t({ [c]: g(o) }), (n = y(a, { startTime: o, doneTime: o })))
} else n = yield f(a)
const i = yield f(R())
i.info = "asked"
const { seedId: s } = i.action.payload,
[d, r] = yield e([f(E(s)), f(h())])
return ((d.info = "complete"), (r.info = "added"), u("join room", [n, i, D([d, r])]))
}
export function* statsJoinRoom(t) {
const { timeStats: e } = yield n(i),
{ log: s } = e || {}
;(s("join room"),
yield o(a, function* (o) {
if (t.running) return
t.lockRunning()
const n = yield statsJoinRoomSaga(o)
;(yield p(n), t.unlockRunning())
}))
}