/**
 * ملف JavaScript الرئيسي لنظام إدارة الموارد البشرية
 */

// متغيرات عامة
let sidebarOpen = false;
let currentUser = null;

// تهيئة النظام عند تحميل الصفحة
document.addEventListener('DOMContentLoaded', function() {
    initializeApp();
});

/**
 * تهيئة التطبيق
 */
function initializeApp() {
    initializeSidebar();
    initializeTooltips();
    initializeModals();
    initializeForms();
    checkScreenSize();
    
    // مراقبة تغيير حجم الشاشة
    window.addEventListener('resize', checkScreenSize);
    
    console.log('تم تهيئة نظام إدارة الموارد البشرية بنجاح');
}

/**
 * تهيئة القائمة الجانبية
 */
function initializeSidebar() {
    const sidebarToggle = document.querySelector('.sidebar-toggle');
    const sidebar = document.querySelector('.sidebar');
    const sidebarOverlay = document.querySelector('.sidebar-overlay');
    const mainContent = document.querySelector('.main-content');
    
    if (sidebarToggle) {
        sidebarToggle.addEventListener('click', toggleSidebar);
    }
    
    if (sidebarOverlay) {
        sidebarOverlay.addEventListener('click', closeSidebar);
    }
    
    // إغلاق القائمة الجانبية عند الضغط على Escape
    document.addEventListener('keydown', function(e) {
        if (e.key === 'Escape' && sidebarOpen) {
            closeSidebar();
        }
    });
    
    // تفعيل الرابط النشط في القائمة
    highlightActiveMenuItem();
}

/**
 * تبديل حالة القائمة الجانبية
 */
function toggleSidebar() {
    if (sidebarOpen) {
        closeSidebar();
    } else {
        openSidebar();
    }
}

/**
 * فتح القائمة الجانبية
 */
function openSidebar() {
    const sidebar = document.querySelector('.sidebar');
    const sidebarOverlay = document.querySelector('.sidebar-overlay');
    const mainContent = document.querySelector('.main-content');
    
    if (sidebar) {
        sidebar.classList.add('active');
        sidebarOpen = true;
        
        // إضافة التراكب في الشاشات الصغيرة
        if (window.innerWidth < 992) {
            if (sidebarOverlay) {
                sidebarOverlay.classList.add('active');
            }
        } else {
            if (mainContent) {
                mainContent.classList.add('sidebar-open');
            }
        }
        
        // تحديث أيقونة الزر
        updateSidebarToggleIcon(true);
    }
}

/**
 * إغلاق القائمة الجانبية
 */
function closeSidebar() {
    const sidebar = document.querySelector('.sidebar');
    const sidebarOverlay = document.querySelector('.sidebar-overlay');
    const mainContent = document.querySelector('.main-content');
    
    if (sidebar) {
        sidebar.classList.remove('active');
        sidebarOpen = false;
        
        if (sidebarOverlay) {
            sidebarOverlay.classList.remove('active');
        }
        
        if (mainContent) {
            mainContent.classList.remove('sidebar-open');
        }
        
        // تحديث أيقونة الزر
        updateSidebarToggleIcon(false);
    }
}

/**
 * تحديث أيقونة زر القائمة الجانبية
 */
function updateSidebarToggleIcon(isOpen) {
    const toggleIcon = document.querySelector('.sidebar-toggle i');
    if (toggleIcon) {
        if (isOpen) {
            toggleIcon.className = 'fas fa-times';
        } else {
            toggleIcon.className = 'fas fa-bars';
        }
    }
}

/**
 * تمييز العنصر النشط في القائمة
 */
function highlightActiveMenuItem() {
    const currentPath = window.location.pathname;
    const menuLinks = document.querySelectorAll('.menu-link');
    
    menuLinks.forEach(link => {
        link.classList.remove('active');
        if (link.getAttribute('href') === currentPath) {
            link.classList.add('active');
        }
    });
}

/**
 * فحص حجم الشاشة وتطبيق التغييرات المناسبة
 */
function checkScreenSize() {
    const sidebar = document.querySelector('.sidebar');
    const mainContent = document.querySelector('.main-content');
    
    if (window.innerWidth >= 992) {
        // الشاشات الكبيرة - إظهار القائمة الجانبية دائماً
        if (sidebar) {
            sidebar.classList.add('active');
        }
        if (mainContent) {
            mainContent.classList.add('sidebar-open');
        }
        sidebarOpen = true;
        updateSidebarToggleIcon(true);
        
        // إخفاء التراكب
        const sidebarOverlay = document.querySelector('.sidebar-overlay');
        if (sidebarOverlay) {
            sidebarOverlay.classList.remove('active');
        }
    } else {
        // الشاشات الصغيرة - إخفاء القائمة الجانبية
        if (sidebar) {
            sidebar.classList.remove('active');
        }
        if (mainContent) {
            mainContent.classList.remove('sidebar-open');
        }
        sidebarOpen = false;
        updateSidebarToggleIcon(false);
    }
}

/**
 * تهيئة التلميحات
 */
function initializeTooltips() {
    // تفعيل Bootstrap tooltips إذا كانت متوفرة
    if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip) {
        const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
        tooltipTriggerList.map(function (tooltipTriggerEl) {
            return new bootstrap.Tooltip(tooltipTriggerEl);
        });
    }
}

/**
 * تهيئة النوافذ المنبثقة
 */
function initializeModals() {
    // إغلاق النوافذ المنبثقة عند الضغط على خلفيتها
    const modals = document.querySelectorAll('.modal');
    modals.forEach(modal => {
        modal.addEventListener('click', function(e) {
            if (e.target === modal) {
                closeModal(modal.id);
            }
        });
    });
}

/**
 * تهيئة النماذج
 */
function initializeForms() {
    // تحسين تجربة النماذج
    const forms = document.querySelectorAll('form');
    forms.forEach(form => {
        // إضافة تأثيرات التركيز للحقول
        const inputs = form.querySelectorAll('input, textarea, select');
        inputs.forEach(input => {
            input.addEventListener('focus', function() {
                this.parentElement.classList.add('focused');
            });
            
            input.addEventListener('blur', function() {
                this.parentElement.classList.remove('focused');
            });
        });
    });
}

/**
 * عرض رسالة تنبيه
 */
function showAlert(message, type = 'info', duration = 5000) {
    const alertContainer = document.getElementById('alert-container') || createAlertContainer();
    
    const alertElement = document.createElement('div');
    alertElement.className = `alert alert-${type} fade-in`;
    alertElement.innerHTML = `
        <div class="d-flex justify-content-between align-items-center">
            <span>${message}</span>
            <button type="button" class="btn-close" onclick="closeAlert(this)"></button>
        </div>
    `;
    
    alertContainer.appendChild(alertElement);
    
    // إزالة التنبيه تلقائياً بعد المدة المحددة
    if (duration > 0) {
        setTimeout(() => {
            closeAlert(alertElement.querySelector('.btn-close'));
        }, duration);
    }
}

/**
 * إنشاء حاوية التنبيهات
 */
function createAlertContainer() {
    const container = document.createElement('div');
    container.id = 'alert-container';
    container.style.cssText = `
        position: fixed;
        top: 80px;
        left: 20px;
        right: 20px;
        z-index: 1050;
        pointer-events: none;
    `;
    container.style.pointerEvents = 'none';
    
    const alerts = container.querySelectorAll('.alert');
    alerts.forEach(alert => {
        alert.style.pointerEvents = 'auto';
    });
    
    document.body.appendChild(container);
    return container;
}

/**
 * إغلاق التنبيه
 */
function closeAlert(button) {
    const alert = button.closest('.alert');
    if (alert) {
        alert.style.opacity = '0';
        alert.style.transform = 'translateY(-20px)';
        setTimeout(() => {
            alert.remove();
        }, 300);
    }
}

/**
 * فتح نافذة منبثقة
 */
function openModal(modalId) {
    const modal = document.getElementById(modalId);
    if (modal) {
        modal.style.display = 'block';
        modal.classList.add('show');
        document.body.classList.add('modal-open');
        
        // التركيز على أول عنصر قابل للتفاعل
        const firstInput = modal.querySelector('input, textarea, select, button');
        if (firstInput) {
            firstInput.focus();
        }
    }
}

/**
 * إغلاق نافذة منبثقة
 */
function closeModal(modalId) {
    const modal = document.getElementById(modalId);
    if (modal) {
        modal.style.display = 'none';
        modal.classList.remove('show');
        document.body.classList.remove('modal-open');
    }
}

/**
 * تأكيد الحذف
 */
function confirmDelete(message = 'هل أنت متأكد من الحذف؟') {
    return confirm(message);
}

/**
 * تحميل المحتوى عبر AJAX
 */
function loadContent(url, containerId, showLoading = true) {
    const container = document.getElementById(containerId);
    if (!container) {
        console.error('لم يتم العثور على الحاوية:', containerId);
        return;
    }
    
    if (showLoading) {
        container.innerHTML = '<div class="text-center p-4"><div class="loading"></div><p class="mt-2">جاري التحميل...</p></div>';
    }
    
    fetch(url)
        .then(response => {
            if (!response.ok) {
                throw new Error('خطأ في الشبكة');
            }
            return response.text();
        })
        .then(html => {
            container.innerHTML = html;
            // إعادة تهيئة العناصر الجديدة
            initializeTooltips();
            initializeForms();
        })
        .catch(error => {
            console.error('خطأ في تحميل المحتوى:', error);
            container.innerHTML = '<div class="alert alert-danger">حدث خطأ في تحميل المحتوى</div>';
        });
}

/**
 * إرسال نموذج عبر AJAX
 */
function submitForm(formId, successCallback = null, errorCallback = null) {
    const form = document.getElementById(formId);
    if (!form) {
        console.error('لم يتم العثور على النموذج:', formId);
        return;
    }
    
    const formData = new FormData(form);
    const submitButton = form.querySelector('button[type="submit"]');
    
    // تعطيل زر الإرسال
    if (submitButton) {
        submitButton.disabled = true;
        submitButton.innerHTML = '<div class="loading"></div> جاري الإرسال...';
    }
    
    fetch(form.action, {
        method: form.method || 'POST',
        body: formData
    })
    .then(response => response.json())
    .then(data => {
        if (data.success) {
            showAlert(data.message || 'تم الحفظ بنجاح', 'success');
            if (successCallback) {
                successCallback(data);
            }
        } else {
            showAlert(data.message || 'حدث خطأ', 'danger');
            if (errorCallback) {
                errorCallback(data);
            }
        }
    })
    .catch(error => {
        console.error('خطأ في إرسال النموذج:', error);
        showAlert('حدث خطأ في الإرسال', 'danger');
        if (errorCallback) {
            errorCallback(error);
        }
    })
    .finally(() => {
        // إعادة تفعيل زر الإرسال
        if (submitButton) {
            submitButton.disabled = false;
            submitButton.innerHTML = submitButton.getAttribute('data-original-text') || 'حفظ';
        }
    });
}

/**
 * تنسيق التاريخ
 */
function formatDate(date, format = 'YYYY-MM-DD') {
    const d = new Date(date);
    const year = d.getFullYear();
    const month = String(d.getMonth() + 1).padStart(2, '0');
    const day = String(d.getDate()).padStart(2, '0');
    
    switch (format) {
        case 'DD/MM/YYYY':
            return `${day}/${month}/${year}`;
        case 'MM/DD/YYYY':
            return `${month}/${day}/${year}`;
        case 'YYYY-MM-DD':
        default:
            return `${year}-${month}-${day}`;
    }
}

/**
 * تنسيق الأرقام
 */
function formatNumber(number, decimals = 2) {
    return parseFloat(number).toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

/**
 * التحقق من صحة البريد الإلكتروني
 */
function validateEmail(email) {
    const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return re.test(email);
}

/**
 * التحقق من صحة رقم الهاتف
 */
function validatePhone(phone) {
    const re = /^[\+]?[0-9\s\-\(\)]{10,}$/;
    return re.test(phone);
}

/**
 * تصدير البيانات إلى Excel
 */

function exportToExcel(tableId, filename = 'data.csv') {
    const table = document.getElementById(tableId);
    if (!table) {
        alert('لم يتم العثور على الجدول');
        return;
    }

    let csvContent = '\uFEFF'; // ✅ إضافة BOM لدعم العربية
    const rows = table.querySelectorAll('tr');

    rows.forEach(row => {
        // تجاهل الصفوف المخفية
        if (row.style.display === 'none') return;

        const cols = row.querySelectorAll('th, td');
        const rowData = Array.from(cols).map(col => {
            return '"' + col.innerText.replace(/"/g, '""') + '"';
        }).join(',');

        csvContent += rowData + "\n";
    });

    // إنشاء ملف CSV وتحميله
    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = filename;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

/**
 * طباعة الصفحة
 */
function printPage() {
    window.print();
}

/**
 * نسخ النص إلى الحافظة
 */
function copyToClipboard(text) {
    navigator.clipboard.writeText(text).then(() => {
        showAlert('تم نسخ النص', 'success', 2000);
    }).catch(() => {
        showAlert('فشل في نسخ النص', 'danger');
    });
}

// تصدير الوظائف للاستخدام العام
window.HRMS = {
    toggleSidebar,
    openSidebar,
    closeSidebar,
    showAlert,
    openModal,
    closeModal,
    confirmDelete,
    loadContent,
    submitForm,
    formatDate,
    formatNumber,
    validateEmail,
    validatePhone,
    exportToExcel,
    printPage,
    copyToClipboard
};


// // الاستماع للرسائل القادمة من Service Worker
// navigator.serviceWorker.addEventListener('message', (event) => {
//     const data = event.data;
//     if (!data || data.type !== 'FCM_MESSAGE') return;

//     const payload = data.payload;
//     console.log('📬 رسالة واردة من SW:', payload);

//     // مثال: إشعار داخل الصفحة
//     alert(`رسالة جديدة: ${payload.notification?.title}\n${payload.notification?.body}`);
// });

