export class ScrollElementManager {
    private contentElement: HTMLElement | null;
    private storageKey: string;
    private debug: boolean;

    constructor(
        contentSelector: string,
        storageKey: string = "scrollpos",
        debug = false,
    ) {
        this.contentElement = document.querySelector(contentSelector);
        this.storageKey = storageKey;
        this.debug = debug;

        if (!this.contentElement) {
            if (this.debug)
                console.warn(
                    "ScrollElementManager: Element not found:",
                    contentSelector,
                );
            return;
        }

        this.initialize();
    }

    private initialize(): void {
        window.addEventListener("load", this.loadScrollPosition.bind(this));
        this.contentElement?.addEventListener(
            "scroll",
            this.updateScrollPosition.bind(this),
        );

        if (this.debug) console.log("ScrollElementManager initialized.");
    }

    private loadScrollPosition(): void {
        try {
            const scrollpos = sessionStorage.getItem(this.storageKey);
            if (scrollpos !== null && this.contentElement) {
                this.contentElement.scrollTop = parseInt(scrollpos, 10);
                sessionStorage.removeItem(this.storageKey);

                if (this.debug)
                    console.log("Scroll position restored:", scrollpos);
            }
        } catch (err) {
            if (this.debug)
                console.error(
                    "ScrollElementManager error loading scroll position:",
                    err,
                );
        }
    }

    private updateScrollPosition(): void {
        try {
            if (this.contentElement) {
                sessionStorage.setItem(
                    this.storageKey,
                    this.contentElement.scrollTop.toString(),
                );
                if (this.debug)
                    console.log(
                        "Scroll position saved:",
                        this.contentElement.scrollTop,
                    );
            }
        } catch (err) {
            if (this.debug)
                console.error(
                    "ScrollElementManager error saving scroll position:",
                    err,
                );
        }
    }
}
