// Pure gesture helper for the reader's single-page swipe navigation. Kept
// UI-free so the "is this a page-turn swipe, and which way" decision is
// unit-testable without dispatching pointer events.

export const SWIPE_THRESHOLD_PX = 45;

/**
 * Classifies a pointer displacement as a page-turn swipe. Returns `'next'`
 * for a leftward swipe, `'prev'` for a rightward one, or `null` when the
 * gesture is too short or too vertical to be a deliberate horizontal swipe
 * (so vertical panning never turns the page).
 */
export function swipeDirection(
    dx: number,
    dy: number,
    threshold: number = SWIPE_THRESHOLD_PX
): 'next' | 'prev' | null {
    if (Math.abs(dx) < threshold) return null;
    // Must be predominantly horizontal — a diagonal or vertical drag is not
    // a page turn.
    if (Math.abs(dx) <= Math.abs(dy)) return null;
    return dx < 0 ? 'next' : 'prev';
}
