// modules/scroll-timeline/index.js
import { Logger } from '../../core/logger.js';
import { scrollSteps } from './steps.js';
import {registerFrameTask, unregisterFrameTask} from '../../core/frameloop.js';

export function init(userConfig = {}) {
    Logger.info('ScrollTimeline init');

    const defaultConfig = {
        attribute: 'data-scroll-step',
        triggerPoint: 0.4,
        once: true
    };

    const config = { ...defaultConfig, ...userConfig };

    const steps = Array.from(document.querySelectorAll(`[${config.attribute}]`)).map(el => ({
        el,
        index: parseInt(el.getAttribute(config.attribute), 10),
        active: false
    }));

    function update() {
        const triggerY = window.innerHeight * config.triggerPoint;

        steps.forEach(step => {
            const rect = step.el.getBoundingClientRect();
            const isVisible = rect.top < triggerY && rect.bottom > 0;

            if (isVisible && !step.active) {
                step.active = true;
                step.el.classList.add('active');
                Logger.log(`➡️ ENTER step ${step.index}`);
                scrollSteps.onEnter?.(step.index, step.el);
            }

            if (!isVisible && step.active) {
                step.active = false;
                step.el.classList.remove('active');
                Logger.log(`⬅️ LEAVE step ${step.index}`);
                if (!config.once) {
                    scrollSteps.onLeave?.(step.index, step.el);
                }
            }
        });
    }

    registerFrameTask('scroll-timeline', update, { autoStart: true });
}

export function destroy () {
    unregisterFrameTask('scroll-timeline');
}
