'use client';

import store from '@/store';
import { Provider } from 'react-redux';
import React, { ReactNode, Suspense, useEffect } from 'react';
// import { appWithI18Next } from 'ni18n';
// import { ni18nConfig } from 'ni18n.config.ts';
import Loading from '@/components/layouts/loading';
import { SessionProvider } from 'next-auth/react';
import App from '../../../App';
interface IProps {
    children?: ReactNode;
}
// The locale-specific date/time formatting rules.
import TimeAgo from 'javascript-time-ago';
import en from 'javascript-time-ago/locale/en';
import ar from 'javascript-time-ago/locale/ar';
TimeAgo.addLocale(en);
TimeAgo.addLocale(ar);
const ProviderComponent = ({ children }: IProps) => {
    usePreventZoom();
    return (
        <SessionProvider >
            <Provider store={store}>
                <Suspense fallback={<Loading />}>
                    <App>  {children} </App>
                </Suspense>
            </Provider>
        </SessionProvider>
    );
};

export default ProviderComponent;
// todo
// export default appWithI18Next(ProviderComponent, ni18nConfig);


function usePreventZoom(scrollCheck = true, keyboardCheck = true) {
    useEffect(() => {
        const handleKeydown = (e: any) => {
            if (
                keyboardCheck &&
                e.ctrlKey &&
                (e.keyCode == "61" ||
                    e.keyCode == "107" ||
                    e.keyCode == "173" ||
                    e.keyCode == "109" ||
                    e.keyCode == "187" ||
                    e.keyCode == "189")
            ) {
                e.preventDefault();
            }
        };

        const handleWheel = (e: any) => {
            if (scrollCheck && e.ctrlKey) {
                e.preventDefault();
            }
        };

        document.addEventListener("keydown", handleKeydown);
        document.addEventListener("wheel", handleWheel, { passive: false });

        return () => {
            document.removeEventListener("keydown", handleKeydown);
            document.removeEventListener("wheel", handleWheel);
        };
    }, [scrollCheck, keyboardCheck]);
}

