function sm2(prev, quality) { let { ease_factor: e, interval_days: i, repetitions: r } = prev; if (quality < 3) { r = 0; i = 1; } else { if (r === 0) i = 1; else if (r === 1) i = 6; else i = Math.round(i * e); r += 1; } e = Math.max(1.3, e + (0.1 - (5 - quality) * (0.08 + (5 - quality) * 0.02))); // next_review uses local timezone — acceptable for a personal study app const next = new Date(); next.setDate(next.getDate() + i); return { ease_factor: +e.toFixed(2), interval_days: i, repetitions: r, next_review: next.toISOString().slice(0, 10), }; } module.exports = { sm2 };