window.ReactApp.mount = function () {
    var publicGridNode = document.getElementById('react-programs-grid');
    if (publicGridNode && !publicGridNode.hasAttribute('data-react-mounted')) {
        if (!window.ReactApp.PublicProgramsGrid) {
            setTimeout(window.ReactApp.mount, 200);
            return;
        }
        var publicRoot = ReactDOM.createRoot(publicGridNode);
        publicRoot.render(<window.ReactApp.PublicProgramsGrid />);
        publicGridNode.setAttribute('data-react-mounted', 'true');
    }

    var adminNode = document.getElementById('react-admin-programs-root');
    if (adminNode && !adminNode.hasAttribute('data-react-mounted')) {
        if (!window.ReactApp.AdminPrograms) {
            setTimeout(window.ReactApp.mount, 200);
            return;
        }
        var adminRoot = ReactDOM.createRoot(adminNode);
        adminRoot.render(<window.ReactApp.AdminPrograms />);
        adminNode.setAttribute('data-react-mounted', 'true');
    }
};

window.renderReactComponents = function () {
    if (window.ReactApp && window.ReactApp.mount) {
        window.ReactApp.mount();
    }
};

document.addEventListener('DOMContentLoaded', function () {
    if (!('requestIdleCallback' in window)) return;
    requestIdleCallback(function () {
        var page = document.getElementById('all-programs-page');
        if (page && !page.classList.contains('hidden')) {
            window.renderReactComponents();
        }
    }, { timeout: 12000 });
});
