/**
 * Hierarchy Data Compatibility Layer
 * Provides backward compatibility for existing code that expects synchronous hierarchyData
 */

// Global variable to hold the hierarchy data once loaded
let hierarchyData = null;

// Flag to track loading state
let hierarchyLoading = false;

// Queue of functions waiting for hierarchy data
let hierarchyWaitQueue = [];

/**
 * Initialize hierarchy data and provide backward compatibility
 */
async function initializeHierarchyData() {
    if (hierarchyLoading) {
        return;
    }
    
    hierarchyLoading = true;
    
    try {
        console.log('Loading hierarchy data...');
        
        // Get data from hierarchy manager
        hierarchyData = await window.hierarchyManager.getData();
        
        console.log('Hierarchy data loaded successfully');
        
        // Process any queued functions
        while (hierarchyWaitQueue.length > 0) {
            const callback = hierarchyWaitQueue.shift();
            try {
                callback();
            } catch (error) {
                console.error('Error in queued hierarchy callback:', error);
            }
        }
        
        // Dispatch event for other parts of the app
        window.dispatchEvent(new CustomEvent('hierarchyDataLoaded', { 
            detail: { data: hierarchyData } 
        }));
        
    } catch (error) {
        console.error('Failed to load hierarchy data:', error);
        
        // Provide empty fallback to prevent errors
        hierarchyData = {};
        
        // Still process the queue with empty data
        while (hierarchyWaitQueue.length > 0) {
            const callback = hierarchyWaitQueue.shift();
            try {
                callback();
            } catch (error) {
                console.error('Error in queued hierarchy callback:', error);
            }
        }
    } finally {
        hierarchyLoading = false;
    }
}

/**
 * Execute function when hierarchy data is available
 * @param {Function} callback - Function to execute when data is ready
 */
function whenHierarchyReady(callback) {
    if (hierarchyData !== null) {
        // Data is already available
        callback();
    } else {
        // Queue the callback
        hierarchyWaitQueue.push(callback);
    }
}

/**
 * Check if hierarchy data is loaded
 * @returns {boolean}
 */
function isHierarchyDataLoaded() {
    return hierarchyData !== null;
}

// Start loading hierarchy data when DOM is ready
document.addEventListener('DOMContentLoaded', function() {
    // Initialize hierarchy data
    initializeHierarchyData();
});

// Export functions for global use
window.whenHierarchyReady = whenHierarchyReady;
window.isHierarchyDataLoaded = isHierarchyDataLoaded;
window.initializeHierarchyData = initializeHierarchyData;