• Computes daily chapter reading deltas by manga across reading history. Tracks progress change per manga per day, excluding days with no progress.

    Parameters

    • history: ReadingHistory

      Reading history with chronologically sorted entries

    Returns Map<string, Map<string | number, number>>

    Map of date -> Map of mangaId -> daily delta (chapters read that day)

    export function computeDailyDeltasByManga(
    history: ReadingHistory,
    ): Map<string, Map<string | number, number>> {
    const dailyDeltaMap = new Map<string, Map<string | number, number>>();
    const prevChaptersPerManga = new Map<string | number, number>();

    // Sort entries by timestamp to ensure chronological order
    const sortedEntries = [...history.entries].sort(
    (a, b) => a.timestamp - b.timestamp,
    );

    for (const entry of sortedEntries) {
    const date = getDateKey(entry.timestamp);
    const mangaId = entry.mangaId;
    const prevChapters = prevChaptersPerManga.get(mangaId) ?? 0;
    const delta = Math.max(0, entry.chaptersRead - prevChapters);

    // Only record if there's progress that day
    if (delta > 0) {
    if (!dailyDeltaMap.has(date)) {
    dailyDeltaMap.set(date, new Map());
    }
    dailyDeltaMap.get(date)!.set(mangaId, delta);
    }

    // Update previous chapters for next iteration
    prevChaptersPerManga.set(mangaId, entry.chaptersRead);
    }

    return dailyDeltaMap;
    }