/**
 * Alert Notes JavaScript Module
 * Handles loading and displaying alert notes for customers and contacts
 */

/**
 * Load and display alerts for an entity
 * @param {string} entityType - 'customer' or 'contact'
 * @param {number} entityId - The entity ID
 * @param {string} mode - 'inline' (show in page) or 'modal' (show popup)
 * @param {string} containerId - Optional container ID for inline mode (default: 'alert-notes-container')
 */
async function loadAndDisplayAlerts(entityType, entityId, mode = 'inline', containerId = 'alert-notes-container') {
    try {
        const response = await fetch(`/api/v1/alert-notes/check?entity_type=${entityType}&entity_id=${entityId}`, {
            credentials: 'include'
        });
        
        if (!response.ok) {
            console.error('Failed to fetch alerts:', response.status);
            return;
        }
        
        const data = await response.json();
        
        if (!data.has_alerts) {
            // No alerts - clear container if in inline mode
            if (mode === 'inline') {
                const container = document.getElementById(containerId);
                if (container) {
                    container.innerHTML = '';
                }
            }
            return;
        }
        
        // Store for later use
        window.currentAlertData = data;
        
        if (mode === 'modal') {
            // Show modal popup
            showAlertModal(data.alerts);
        } else {
            // Show inline
            displayAlertsInline(data.alerts, containerId, data.user_has_acknowledged);
        }
        
    } catch (error) {
        console.error('Error loading alerts:', error);
    }
}

/**
 * Display alerts inline in a container
 * @param {Array} alerts - Array of alert objects
 * @param {string} containerId - Container element ID
 * @param {boolean} userHasAcknowledged - Whether user has acknowledged all
 */
function displayAlertsInline(alerts, containerId, userHasAcknowledged) {
    const container = document.getElementById(containerId);
    if (!container) {
        console.error('Alert container not found:', containerId);
        return;
    }
    
    // Clear existing content
    container.innerHTML = '';
    
    // Add each alert
    alerts.forEach(alert => {
        // Set user_has_acknowledged on individual alert if needed
        alert.user_has_acknowledged = userHasAcknowledged;
        
        // Render using the renderAlertBox function from alert_box.html
        const alertHtml = renderAlertBox(alert);
        container.innerHTML += alertHtml;
    });
}

/**
 * Acknowledge a single alert
 * @param {number} alertId - The alert ID
 * @param {HTMLElement} buttonElement - The button that was clicked
 */
async function acknowledgeAlert(alertId, buttonElement) {
    try {
        const response = await fetch(`/api/v1/alert-notes/${alertId}/acknowledge`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            credentials: 'include'
        });
        
        const data = await response.json();
        
        if (data.status === 'acknowledged' || data.status === 'already_acknowledged') {
            // Remove the alert box with fade animation
            const alertBox = buttonElement.closest('.alert-note-box');
            if (alertBox) {
                alertBox.style.opacity = '0';
                alertBox.style.transform = 'translateX(-20px)';
                alertBox.style.transition = 'all 0.3s';
                setTimeout(() => alertBox.remove(), 300);
            }
        }
    } catch (error) {
        console.error('Error acknowledging alert:', error);
        alert('Kunne ikke markere som læst. Prøv igen.');
    }
}

/**
 * Initialize alert checking on page load
 * Call this from your page's DOMContentLoaded or similar
 * @param {string} entityType - 'customer' or 'contact'
 * @param {number} entityId - The entity ID
 * @param {Object} options - Optional settings {mode: 'inline'|'modal', containerId: 'element-id'}
 */
function initAlertNotes(entityType, entityId, options = {}) {
    const mode = options.mode || 'inline';
    const containerId = options.containerId || 'alert-notes-container';
    
    loadAndDisplayAlerts(entityType, entityId, mode, containerId);
}

// Make functions globally available
window.loadAndDisplayAlerts = loadAndDisplayAlerts;
window.displayAlertsInline = displayAlertsInline;
window.acknowledgeAlert = acknowledgeAlert;
window.initAlertNotes = initAlertNotes;
