// modules/inertia-scroll/index.js
import { registerFrameTask, unregisterFrameTask } from '../../core/frameloop.js';

let taskId = 'inertia-scroll';
let velocity = 0;
let lastY = window.scrollY;
let active = false;
let scrollEndTimer;
let damping = 0.9;
let minVelocity = 0.2;

export function init(config = {}) {
    damping = typeof config.damping === 'number' ? config.damping : 0.9;

    minVelocity = typeof config.minVelocity === 'number' ? contig.minVelocity : 0.1;

    window.addEventListener('scroll', onScroll, { passive: true });

    registerFrameTask(taskId, () => {
        const root = document.documentElement;
        const scrollY = window.scrollY;
        const delta = scrollY - lastY;
        const direction = delta > 0 ? 'down' : delta < 0 ? 'up' : 'none';
        const speed = Math.abs(delta);

        if (!active && Math.abs(velocity) > minVelocity) {
            window.scrollTo(0, scrollY + velocity);
            velocity *= damping; // Trägheit / Dämpfung
            root.dataset.scrollState = 'inertia';
        } else if (active) {
            velocity = delta;
            lastY = scrollY;
            root.dataset.scrollState = 'active';
        } else {
            delete root.dataset.scrollState;
        }

        root.dataset.scrollDirection = direction;
        root.dataset.scrollSpeed = speed.toFixed(2);
    }, { autoStart: true });
}

function onScroll() {
    active = true;
    clearTimeout(scrollEndTimer);
    scrollEndTimer = setTimeout(() => {
        active = false;
    }, 50);
}

export function destroy() {
    window.removeEventListener('scroll', onScroll);
    unregisterFrameTask(taskId);
    velocity = 0;
    lastY = window.scrollY;
    active = false;
    clearTimeout(scrollEndTimer);

    const root = document.documentElement;
    delete root.dataset.scrollState;
    delete root.dataset.scrollDirection;
    delete root.dataset.scrollSpeed;
}
