/**
 * Real-time Location Updates System
 * نظام تحديث الموقع في الوقت الفعلي
 * 
 * يقوم بتحديث مواقع الأجهزة تلقائياً من Firebase
 */

class RealtimeUpdates {
    constructor() {
        this.updateInterval = 10000; // 10 ثوانٍ
        this.deviceListeners = new Map(); // متتبعو الأجهزة
        this.isEnabled = false;
        this.updateTimer = null;
        this.lastUpdateTimes = new Map(); // تتبع آخر تحديث لكل جهاز
    }

    /**
     * تفعيل التحديثات التلقائية
     */
    enable() {
        if (this.isEnabled) return;
        
        this.isEnabled = true;
        console.log('✅ تم تفعيل التحديثات التلقائية');
        
        // بدء التحديث التلقائي
        this.startAutoUpdate();
        
        // تحديث قائمة الأجهزة كل 30 ثانية
        this.startDeviceListUpdate();
    }

    /**
     * تعطيل التحديثات التلقائية
     */
    disable() {
        this.isEnabled = false;
        if (this.updateTimer) {
            clearInterval(this.updateTimer);
            this.updateTimer = null;
        }
        console.log('⏸️ تم تعطيل التحديثات التلقائية');
    }


    /**
     * تحديث موقع جهاز محدد
     */
    async updateDeviceLocation(deviceId) {
        if (!deviceId) return;

        try {
            const response = await fetch(`get_latest_location.php?device_id=${encodeURIComponent(deviceId)}&t=${Date.now()}`);
            if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
            
            const data = await response.json();
            
            if (data.status === 'success' && data.data) {
                const lastUpdateTime = this.lastUpdateTimes.get(deviceId);
                const currentTimestamp = data.data.timestamp;
                
                // التحقق من وجود تحديث جديد
                if (!lastUpdateTime || lastUpdateTime !== currentTimestamp) {
                    this.lastUpdateTimes.set(deviceId, currentTimestamp);
                    
                    // تحديث الموقع على الخريطة
                    this.updateMapMarker(data.data);
                    
                    // تحديث حالة الجهاز في القائمة
                    this.updateDeviceStatus(deviceId, data.data);
                    
                    // تحديث موقع الجهاز في عرض الأجهزة المتعددة
                    if (typeof multiDeviceView !== 'undefined' && multiDeviceView.isEnabled) {
                        multiDeviceView.updateDeviceLocation(deviceId, data.data);
                    }
                    
                    // تم تعطيل الإشعارات التلقائية - التحديث فقط عند الضغط على زر "آخر موقع"
                    // if (lastUpdateTime) {
                    //     this.showLocationUpdateNotification(data.data);
                    // }
                }
            }
        } catch (error) {
            console.error('❌ خطأ في تحديث الموقع:', error);
        }
    }

    /**
     * تحديث العلامة على الخريطة
     */
    updateMapMarker(locationData) {
        if (typeof map === 'undefined' || !map) return;
        
        const lat = parseFloat(locationData.latitude);
        const lng = parseFloat(locationData.longitude);
        
        if (isNaN(lat) || isNaN(lng)) return;

        // استخدام latestMarker الموجود أو إنشاء جديد
        if (typeof latestMarker !== 'undefined' && latestMarker) {
            latestMarker.setPosition({ lat, lng });
        } else if (typeof fetchLatestLocation === 'function') {
            // استدعاء الدالة الموجودة لتحديث الموقع
            fetchLatestLocation();
        }
    }

    /**
     * تحديث حالة الجهاز في القائمة الجانبية
     */
    updateDeviceStatus(deviceId, locationData) {
        const deviceItem = document.querySelector(`li[data-device-id="${deviceId}"]`);
        if (!deviceItem) return;

        const timestamp = locationData.timestamp ? new Date(locationData.timestamp).getTime() : 0;
        const now = Date.now();
        const isActive = timestamp > (now - 60000); // نشط إذا كان خلال آخر دقيقة

        // تحديث مؤشر الحالة
        const statusIndicator = deviceItem.querySelector('.device-status-indicator');
        if (statusIndicator) {
            statusIndicator.textContent = isActive ? '🟢' : '⚪';
            statusIndicator.title = isActive ? 'نشط' : 'غير نشط';
        }

        // تحديث class
        deviceItem.classList.remove('device-active', 'device-inactive');
        deviceItem.classList.add(isActive ? 'device-active' : 'device-inactive');
    }

    /**
     * تحديث قائمة الأجهزة
     */
    async updateDeviceList() {
        try {
            // إعادة تحميل قائمة الأجهزة من Firebase
            const url = `dashboard.php?refresh_devices=1&ajax=1&t=${Date.now()}`;
            const response = await fetch(url);
            if (response.ok) {
                // يمكن إضافة منطق لتحديث القائمة دون إعادة تحميل الصفحة
                console.log('✅ تم تحديث قائمة الأجهزة');
            } else {
                console.warn('⚠️ لم يتم تحديث قائمة الأجهزة:', response.status);
            }
        } catch (error) {
            console.error('❌ خطأ في تحديث قائمة الأجهزة:', error);
        }
    }

    /**
     * بدء التحديث التلقائي
     */
    startAutoUpdate() {
        if (this.updateTimer) {
            clearInterval(this.updateTimer);
        }

        // تحديث فوري
        this.updateCurrentDevice();

        // ثم تحديث دوري
        this.updateTimer = setInterval(() => {
            if (this.isEnabled) {
                this.updateCurrentDevice();
            }
        }, this.updateInterval);
    }
    
    /**
     * تحديث موقع الجهاز المحدد حالياً
     */
    updateCurrentDevice() {
        const deviceSelect = document.getElementById('deviceSelect');
        if (!deviceSelect) return;

        const deviceId = deviceSelect.value;
        if (!deviceId) {
            // لا يوجد جهاز محدد، تحديث قائمة الأجهزة فقط
            this.updateDeviceList();
            return;
        }

        // جلب آخر موقع للجهاز المحدد
        this.updateDeviceLocation(deviceId);
    }

    /**
     * تحديث قائمة الأجهزة دورياً
     */
    startDeviceListUpdate() {
        setInterval(() => {
            if (this.isEnabled) {
                this.updateDeviceList();
            }
        }, 30000); // كل 30 ثانية
    }

    /**
     * إظهار إشعار عند تحديث الموقع
     * تم تعطيله بناءً على طلب المستخدم - التحديث فقط عند الضغط على زر "آخر موقع"
     */
    showLocationUpdateNotification(locationData) {
        // تم تعطيل الإشعارات التلقائية - التحديث فقط عند الضغط على زر "آخر موقع"
        // if (typeof showToast === 'function') {
        //     const deviceName = locationData.device_name || 'الجهاز';
        //     showToast(`📍 تم تحديث موقع ${deviceName}`, 'info', 2000);
        // }
    }
}

// إنشاء instance عام
const realtimeUpdates = new RealtimeUpdates();

// تم تعطيل التحديثات التلقائية بناءً على طلب المستخدم
// التحديث فقط عند الضغط على زر "آخر موقع"
// document.addEventListener('DOMContentLoaded', () => {
//     // تفعيل بعد ثانيتين من تحميل الصفحة
//     setTimeout(() => {
//         realtimeUpdates.enable();
//     }, 2000);
// });

// تصدير للاستخدام العام
window.RealtimeUpdates = RealtimeUpdates;
window.realtimeUpdates = realtimeUpdates;

