import type { Context } from 'telegraf'; import type { Database } from 'better-sqlite3'; function getStreaks(db: Database): { current: number; longest: number } { const rows = db.prepare( "SELECT date FROM schedule WHERE status = 'completed' ORDER BY date ASC" ).all() as Array<{ date: string }>; if (rows.length === 0) return { current: 0, longest: 0 }; let current = 1, longest = 1, streak = 1; for (let i = 1; i < rows.length; i++) { const prev = new Date(rows[i - 1]!.date + 'T12:00:00'); const curr = new Date(rows[i]!.date + 'T12:00:00'); const diff = Math.round((curr.getTime() - prev.getTime()) / 86400000); if (diff <= 2) { streak++; if (streak > longest) longest = streak; } else { streak = 1; } } current = streak; return { current, longest }; } export function handleStreak(db: Database) { return async (ctx: Context) => { const { current, longest } = getStreaks(db); await ctx.reply(`šŸ”„ Current streak: ${current} sessions\nšŸ† Longest streak: ${longest} sessions`); }; }