import { useEffect } from 'react';

import { markAdminNonTranslatableContent } from '@admin/lib/mark-admin-non-translatable';
import { ensureSyntoThemeScripts } from '@admin/lib/load-synto-theme-scripts';
import { syncAdminBodyClass } from '@admin/lib/sync-admin-body-class';

/**
 * Runs once and after Inertia navigations so <body> matches the current route (see admin.blade.php).
 */
export function AdminShellEffects() {
    useEffect(() => {
        syncAdminBodyClass();
        markAdminNonTranslatableContent();

        const handler = (): void => {
            syncAdminBodyClass();
            markAdminNonTranslatableContent();
            ensureSyntoThemeScripts().catch(console.error);
        };

        document.addEventListener('inertia:success', handler);

        const contentRoot = document.querySelector('.main-content');
        const domObserver =
            contentRoot !== null
                ? new MutationObserver(() => {
                      markAdminNonTranslatableContent(contentRoot);
                  })
                : null;

        if (contentRoot !== null && domObserver !== null) {
            domObserver.observe(contentRoot, { childList: true, subtree: true });
        }

        return () => {
            document.removeEventListener('inertia:success', handler);
            domObserver?.disconnect();
        };
    }, []);

    return null;
}
