// activity_tracker.js — Client-side activity tracker

const UserTracker = {
    heartbeatInterval: null,
    HEARTBEAT_SECONDS: 30,
    
    init() {
        this.startHeartbeat();
        this.trackPageLeave();
        this.trackMapActions();
        this.trackFilterActions();
        this.trackClicks();
        
        // ثبت بازدید صفحه
        this.logAction('page_view', window.location.pathname);
    },
    
    // ارسال هارت‌بیت هر ۳۰ ثانیه
    startHeartbeat() {
        const sendBeat = () => {
            const mapData = this.getMapState();
            
            const formData = new FormData();
            formData.append('action', 'heartbeat');
            formData.append('zoom', mapData.zoom);
            formData.append('lat', mapData.lat);
            formData.append('lng', mapData.lng);
            formData.append('visible_stores', mapData.visibleStores);
            
            fetch('track_api.php', {
                method: 'POST',
                body: formData
            }).catch(() => {}); // ارور رو بی‌صدا رد کن
        };
        
        // اولین هارت‌بیت بعد از ۵ ثانیه
        setTimeout(sendBeat, 5000);
        this.heartbeatInterval = setInterval(sendBeat, this.HEARTBEAT_SECONDS * 1000);
    },
    
    getMapState() {
        if (typeof App !== 'undefined' && App.map) {
            const center = App.map.getCenter();
            return {
                zoom: App.map.getZoom() || 0,
                lat: center ? center.lat : 0,
                lng: center ? center.lng : 0,
                visibleStores: App.data.filtered ? App.data.filtered.length : 0
            };
        }
        return { zoom: 0, lat: 0, lng: 0, visibleStores: 0 };
    },
    
    // وقتی کاربر صفحه رو می‌بنده
    trackPageLeave() {
        const sendLeave = () => {
            const formData = new FormData();
            formData.append('action', 'page_leave');
            navigator.sendBeacon('track_api.php', formData);
        };
        
        window.addEventListener('beforeunload', sendLeave);
        document.addEventListener('visibilitychange', () => {
            if (document.visibilityState === 'hidden') {
                sendLeave();
            }
        });
    },
    
    // ثبت تغییرات نقشه
    trackMapActions() {
        // منتظر بمون تا App آماده بشه
        const waitForApp = setInterval(() => {
            if (typeof App !== 'undefined' && App.map) {
                clearInterval(waitForApp);
                
                App.map.on('zoomend', () => {
                    this.logAction('map_zoom', `Zoom: ${App.map.getZoom().toFixed(1)}`);
                });
                
                // فقط drag (نه هر moveend)
                App.map.on('dragend', () => {
                    const c = App.map.getCenter();
                    this.logAction('map_pan', `Center: ${c.lat.toFixed(4)},${c.lng.toFixed(4)}`);
                });
            }
        }, 2000);
    },
    
    // ثبت تغییر فیلترها
    trackFilterActions() {
        const waitForDOM = setInterval(() => {
            if (document.querySelector('#brand-list')) {
                clearInterval(waitForDOM);
                
                // برند تغییر
                document.querySelector('#brand-list')?.addEventListener('change', (e) => {
                    if (e.target.tagName === 'INPUT') {
                        const brand = e.target.id.replace('brand-', '');
                        this.logAction('filter_brand', `${brand}: ${e.target.checked}`);
                    }
                });
                
                // دراپ‌داون‌ها
                ['state', 'county', 'supervisor'].forEach(name => {
                    const dropdown = document.querySelector(`#${name}-dropdown`);
                    if (dropdown) {
                        dropdown.addEventListener('click', (e) => {
                            const opt = e.target.closest('.select-option');
                            if (opt) {
                                this.logAction(`filter_${name}`, opt.dataset.value || 'all');
                            }
                        });
                    }
                });
                
                // رادیو باتن‌ها
                document.querySelectorAll('input[type=radio]').forEach(r => {
                    r.addEventListener('change', () => {
                        this.logAction('filter_radio', `${r.name}: ${r.value}`);
                    });
                });
                
                // ریست
                document.querySelector('#reset-filters-btn')?.addEventListener('click', () => {
                    this.logAction('reset_filters', 'All filters reset');
                });
                
                // کلاسترینگ
                document.querySelector('#toggle-cluster-btn')?.addEventListener('click', () => {
                    this.logAction('toggle_cluster', `Clustering: ${App.state.isClustering}`);
                });
                
                // کلیک روی فروشگاه (popup)
                if (typeof App !== 'undefined' && App.map) {
                    App.map.on('popupopen', (e) => {
                        const content = e.popup.getContent();
                        // استخراج کد فروشگاه از popup
                        const match = content.match(/<b>(\w+)<\/b>/);
                        if (match) {
                            this.logAction('store_click', `Store: ${match[1]}`);
                        }
                    });
                }
            }
        }, 2000);
    },
    
    // کلیک‌های مهم
    trackClicks() {
        document.addEventListener('click', (e) => {
            const btn = e.target.closest('.control-btn, .mobile-menu-btn, .logout-link');
            if (btn) {
                this.logAction('button_click', btn.textContent.trim().substring(0, 50));
            }
        });
    },
    
    // ارسال اکشن به سرور
    logAction(type, detail) {
        const formData = new FormData();
        formData.append('action', 'log_action');
        formData.append('type', type);
        formData.append('detail', detail || '');
        
        fetch('track_api.php', {
            method: 'POST',
            body: formData
        }).catch(() => {});
    }
};

// شروع ترکینگ بعد از لود صفحه
document.addEventListener('DOMContentLoaded', () => {
    // کمی تأخیر تا App آماده بشه
    setTimeout(() => UserTracker.init(), 3000);
});
