/**
 * مثال على التكامل مع نظام المزامنة الأوفلاين
 * يمكن استخدام هذا الكود في صفحات PHP لتشغيل النظام أوفلاين
 */

// مثال 1: إضافة مريض مع دعم الأوفلاين
function setupPatientFormOfflineSupport(formSelector) {
    const form = document.querySelector(formSelector);
    if (!form) return;
    
    form.addEventListener('submit', async function(e) {
        e.preventDefault();
        
        const formData = new FormData(this);
        const patientData = {
            full_name: formData.get('full_name'),
            gender: formData.get('gender') || null,
            date_of_birth: formData.get('date_of_birth') || null,
            phone: formData.get('phone') || null,
            email: formData.get('email') || null,
            national_id: formData.get('national_id') || null,
            address: formData.get('address') || null
        };
        
        // التحقق من وجود البيانات المطلوبة
        if (!patientData.full_name) {
            alert('الاسم الكامل مطلوب');
            return;
        }
        
        const submitButton = this.querySelector('button[type="submit"]');
        const originalText = submitButton.textContent;
        submitButton.disabled = true;
        submitButton.textContent = 'جاري الحفظ...';
        
        try {
            if (navigator.onLine) {
                // محاولة الإرسال المباشر
                try {
                    const response = await fetch('api/offline_sync.php?action=sync_patients', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/json' },
                        body: JSON.stringify({ patients: [patientData] })
                    });
                    
                    const result = await response.json();
                    
                    if (result.success && result.data && result.data.length > 0) {
                        alert('تم حفظ المريض بنجاح');
                        window.location.href = 'index.php?page=patients';
                        return;
                    } else {
                        throw new Error(result.error || 'خطأ في الحفظ');
                    }
                } catch (error) {
                    console.warn('فشل الإرسال المباشر، سيتم الحفظ أوفلاين:', error);
                    // السقوط للحفظ الأوفلاين
                }
            }
            
            // حفظ أوفلاين
            if (window.offlineSync) {
                await window.offlineSync.createPatientOffline(patientData);
                alert('تم حفظ المريض محلياً. سيتم رفعه تلقائياً عند عودة الإنترنت');
                window.location.href = 'index.php?page=patients';
            } else {
                // إذا لم يكن النظام جاهزاً، إرسال النموذج بالطريقة التقليدية
                this.submit();
            }
        } catch (error) {
            console.error('خطأ في حفظ المريض:', error);
            alert('حدث خطأ. سيتم المحاولة مرة أخرى عند عودة الإنترنت');
            // حفظ أوفلاين كبديل
            if (window.offlineSync) {
                await window.offlineSync.createPatientOffline(patientData);
            }
        } finally {
            submitButton.disabled = false;
            submitButton.textContent = originalText;
        }
    });
}

// مثال 2: إنشاء طلب مع دعم الأوفلاين
function setupOrderFormOfflineSupport(formSelector) {
    const form = document.querySelector(formSelector);
    if (!form) return;
    
    form.addEventListener('submit', async function(e) {
        e.preventDefault();
        
        const formData = new FormData(this);
        const orderData = {
            patient_id: parseInt(formData.get('patient_id')) || 0,
            doctor_id: parseInt(formData.get('doctor_id')) || 0,
            branch_id: parseInt(formData.get('branch_id')) || 0,
            package_id: parseInt(formData.get('package_id')) || 0,
            tests: Array.from(form.querySelectorAll('input[name="tests[]"]:checked')).map(cb => parseInt(cb.value))
        };
        
        if (orderData.patient_id <= 0 || orderData.tests.length === 0) {
            alert('يرجى اختيار مريض وفحوصات');
            return;
        }
        
        const submitButton = this.querySelector('button[type="submit"]');
        const originalText = submitButton.textContent;
        submitButton.disabled = true;
        submitButton.textContent = 'جاري الحفظ...';
        
        try {
            if (navigator.onLine) {
                try {
                    const response = await fetch('api/offline_sync.php?action=sync_orders', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/json' },
                        body: JSON.stringify({ orders: [orderData] })
                    });
                    
                    const result = await response.json();
                    
                    if (result.success && result.data && result.data.length > 0) {
                        alert('تم إنشاء الطلب بنجاح');
                        window.location.href = 'index.php?page=orders';
                        return;
                    } else {
                        throw new Error(result.error || 'خطأ في الحفظ');
                    }
                } catch (error) {
                    console.warn('فشل الإرسال المباشر، سيتم الحفظ أوفلاين:', error);
                }
            }
            
            // حفظ أوفلاين
            if (window.offlineSync) {
                await window.offlineSync.createOrderOffline(orderData);
                alert('تم حفظ الطلب محلياً. سيتم رفعه تلقائياً عند عودة الإنترنت');
                window.location.href = 'index.php?page=orders';
            } else {
                this.submit();
            }
        } catch (error) {
            console.error('خطأ في حفظ الطلب:', error);
            alert('حدث خطأ. سيتم المحاولة مرة أخرى عند عودة الإنترنت');
            if (window.offlineSync) {
                await window.offlineSync.createOrderOffline(orderData);
            }
        } finally {
            submitButton.disabled = false;
            submitButton.textContent = originalText;
        }
    });
}

// مثال 3: حفظ نتيجة مع دعم الأوفلاين
function setupResultFormOfflineSupport(formSelector) {
    const form = document.querySelector(formSelector);
    if (!form) return;
    
    form.addEventListener('submit', async function(e) {
        e.preventDefault();
        
        const formData = new FormData(this);
        const resultData = {
            order_item_id: parseInt(formData.get('item_id')) || 0,
            result_value: formData.get('result_value') || '',
            flag: formData.get('flag') || null,
            notes: formData.get('notes') || null
        };
        
        if (resultData.order_item_id <= 0 || !resultData.result_value) {
            alert('يرجى إدخال القيمة');
            return;
        }
        
        const submitButton = this.querySelector('button[type="submit"]');
        const originalText = submitButton.textContent;
        submitButton.disabled = true;
        submitButton.textContent = 'جاري الحفظ...';
        
        try {
            if (navigator.onLine) {
                try {
                    const response = await fetch('api/offline_sync.php?action=sync_results', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/json' },
                        body: JSON.stringify({ results: [resultData] })
                    });
                    
                    const result = await response.json();
                    
                    if (result.success) {
                        alert('تم حفظ النتيجة بنجاح');
                        window.location.reload();
                        return;
                    } else {
                        throw new Error(result.error || 'خطأ في الحفظ');
                    }
                } catch (error) {
                    console.warn('فشل الإرسال المباشر، سيتم الحفظ أوفلاين:', error);
                }
            }
            
            // حفظ أوفلاين
            if (window.offlineSync) {
                await window.offlineSync.saveResultOffline(resultData);
                alert('تم حفظ النتيجة محلياً. سيتم رفعه تلقائياً عند عودة الإنترنت');
                window.location.reload();
            } else {
                this.submit();
            }
        } catch (error) {
            console.error('خطأ في حفظ النتيجة:', error);
            alert('حدث خطأ. سيتم المحاولة مرة أخرى عند عودة الإنترنت');
            if (window.offlineSync) {
                await window.offlineSync.saveResultOffline(resultData);
            }
        } finally {
            submitButton.disabled = false;
            submitButton.textContent = originalText;
        }
    });
}

// استخدام في الصفحات:
// عند تحميل صفحة المرضى:
// if (document.querySelector('form[action*="patients&action=create"]')) {
//     setupPatientFormOfflineSupport('form[action*="patients&action=create"]');
// }
