/**
 * Smart Doctor - JavaScript مشترك
 */
(function() {
    'use strict';

    var API = 'doctor_api.php';

    // بطاقة المريض السريعة (عند المرور بالماوس)
    window.DoctorPatientCard = {
        tooltip: null,
        show: function(el, patientId) {
            if (!patientId) return;
            var self = this;
            if (this.tooltip) { this.hide(); }
            this.tooltip = document.createElement('div');
            this.tooltip.className = 'doctor-patient-card-tooltip';
            this.tooltip.innerHTML = '<div class="doctor-patient-card-loading">جاري التحميل...</div>';
            document.body.appendChild(this.tooltip);
            var rect = el.getBoundingClientRect();
            this.tooltip.style.left = (rect.left + rect.width / 2) + 'px';
            this.tooltip.style.top = (rect.bottom + 8) + 'px';
            this.tooltip.style.transform = 'translate(-50%, 0)';
            fetch(API + '?action=patient_card&patient_id=' + patientId)
                .then(function(r) { return r.json(); })
                .then(function(data) {
                    if (data.error) {
                        self.tooltip.innerHTML = '<div class="doctor-patient-card-error">' + data.error + '</div>';
                    } else {
                        var p = data.patient;
                        var age = p.date_of_birth ? (new Date().getFullYear() - new Date(p.date_of_birth).getFullYear()) : '-';
                        var html = '<div class="doctor-patient-card">';
                        html += '<strong>' + (p.full_name || '') + '</strong> ' + (p.patient_code || '') + '<br>';
                        html += 'العمر: ' + age + ' | ' + (p.gender === 'M' ? 'ذكر' : p.gender === 'F' ? 'أنثى' : '-') + '<br>';
                        if (p.phone) html += '📞 ' + p.phone + '<br>';
                        if (data.critical_count > 0) html += '<span style="color:#dc2626;">⚠️ ' + data.critical_count + ' نتيجة حرجة</span><br>';
                        html += '<small>آخر الطلبات: ' + (data.orders && data.orders.length ? data.orders.length : 0) + '</small>';
                        html += '<div style="margin-top:8px;"><a href="doctor.php?page=results&patient_id=' + p.id + '">عرض النتائج</a> | <a href="doctor.php?page=trend&patient_id=' + p.id + '">📈 مقارنة</a></div>';
                        html += '</div>';
                        self.tooltip.innerHTML = html;
                    }
                })
                .catch(function() {
                    if (self.tooltip) self.tooltip.innerHTML = '<div class="doctor-patient-card-error">خطأ في التحميل</div>';
                });
        },
        hide: function() {
            if (this.tooltip && this.tooltip.parentNode) {
                this.tooltip.parentNode.removeChild(this.tooltip);
                this.tooltip = null;
            }
        }
    };

    // إشعارات المتصفح - موحّدة
    window.DoctorNotifications = {
        lastCheck: { critical: 0, overdue: 0, alerts: 0 },
        check: function() {
            var self = this;
            fetch(API + '?action=notifications_check')
                .then(function(r) { return r.json(); })
                .then(function(data) {
                    var icon = (location.pathname.split('/').slice(0, -1).join('/') || '') + '/favicon.svg';
                    if (icon.indexOf('/') !== 0) icon = '/' + icon;
                    if (data.critical > 0 && data.critical !== self.lastCheck.critical) {
                        if (Notification.permission === 'granted' && document.hidden) {
                            new Notification('Smart Doctor - نتائج حرجة', {
                                body: 'لديك ' + data.critical + ' نتيجة حرجة تحتاج مراجعة فورية',
                                icon: icon,
                                dir: 'rtl',
                                tag: 'critical',
                                requireInteraction: true
                            });
                        }
                        if (!document.hidden && window.DoctorNotificationToast) {
                            window.DoctorNotificationToast.show('نتائج حرجة', 'لديك ' + data.critical + ' نتيجة حرجة تحتاج مراجعة', 'critical', 'doctor.php?page=results&critical=1');
                        }
                    }
                    if (data.overdue > 0 && data.overdue !== self.lastCheck.overdue) {
                        if (Notification.permission === 'granted' && document.hidden) {
                            new Notification('تذكيرات متأخرة', { body: 'يوجد ' + data.overdue + ' تذكير متأخر', icon: icon, dir: 'rtl', tag: 'reminders' });
                        }
                        if (!document.hidden && window.DoctorNotificationToast) {
                            window.DoctorNotificationToast.show('تذكيرات متأخرة', 'لديك ' + data.overdue + ' تذكير متأخر', 'reminder', 'doctor.php?page=reminders');
                        }
                    }
                    if (data.alerts > 0 && data.alerts > self.lastCheck.alerts) {
                        if (!document.hidden && window.DoctorNotificationToast) {
                            window.DoctorNotificationToast.show('تنبيهات جديدة', 'لديك ' + (data.alerts - self.lastCheck.alerts) + ' تنبيه جديد', 'info', 'doctor.php?page=alerts');
                        }
                    }
                    self.lastCheck = { critical: data.critical, overdue: data.overdue, alerts: data.alerts || 0 };
                })
                .catch(function() {});
        },
        requestPermission: function() {
            if ('Notification' in window && Notification.permission === 'default') {
                Notification.requestPermission();
            }
        }
    };

    // Toast للإشعارات داخل التطبيق
    window.DoctorNotificationToast = {
        container: null,
        show: function(title, body, type, actionUrl) {
            if (!this.container) {
                this.container = document.createElement('div');
                this.container.id = 'doctor-toast-container';
                this.container.style.cssText = 'position:fixed;top:20px;right:20px;z-index:10000;display:flex;flex-direction:column;gap:8px;max-width:360px;';
                document.body.appendChild(this.container);
            }
            var colors = { critical: '#dc2626', reminder: '#f59e0b', info: '#0d9488' };
            var toast = document.createElement('div');
            toast.className = 'doctor-notification-toast';
            toast.style.cssText = 'background:white;border-radius:12px;padding:16px;box-shadow:0 4px 20px rgba(0,0,0,0.15);border-right:4px solid ' + (colors[type] || colors.info) + ';animation:doctorToastIn 0.3s ease;';
            toast.innerHTML = '<div style="font-weight:600;margin-bottom:4px;">' + (title || 'إشعار') + '</div><div style="color:var(--text-secondary);font-size:0.9rem;">' + (body || '') + '</div>' +
                (actionUrl ? '<a href="' + actionUrl + '" style="display:inline-block;margin-top:10px;padding:6px 12px;background:var(--primary,#0d9488);color:white;border-radius:8px;text-decoration:none;font-size:0.85rem;">عرض ←</a>' : '');
            this.container.appendChild(toast);
            var self = this;
            setTimeout(function() {
                toast.style.animation = 'doctorToastOut 0.3s ease forwards';
                setTimeout(function() {
                    if (toast.parentNode) toast.parentNode.removeChild(toast);
                }, 300);
            }, 5000);
        }
    };

    // حفظ سجل البحث
    window.DoctorSaveSearch = function(q, type) {
        if (!q || q.length < 2) return;
        var fd = new FormData();
        fd.append('action', 'save_search');
        fd.append('q', q);
        fd.append('type', type || 'all');
        fetch(API, { method: 'POST', body: fd }).catch(function() {});
    };

    // اختصارات لوحة المفاتيح
    document.addEventListener('keydown', function(e) {
        if (e.key === '?' && !e.ctrlKey && !e.metaKey && !e.altKey) {
            var inp = document.activeElement;
            if (inp && (inp.tagName === 'INPUT' || inp.tagName === 'TEXTAREA')) return;
            e.preventDefault();
            var overlay = document.getElementById('doctorShortcutsOverlay');
            if (overlay) overlay.classList.toggle('doctor-shortcuts-show');
            return;
        }
        if (e.key === 'Escape') {
            var o = document.getElementById('doctorShortcutsOverlay');
            if (o) o.classList.remove('doctor-shortcuts-show');
            document.querySelectorAll('.doctor-focus-mode').forEach(function(el) { el.classList.remove('doctor-focus-mode'); });
        }
        if (e.ctrlKey || e.metaKey) {
            if (e.key === 'k') {
                e.preventDefault();
                var inp = document.querySelector('form[action*="page=search"] input[type="search"], input[name="q"]');
                if (inp) { inp.focus(); inp.select(); }
            }
            if (e.key === 'h') {
                e.preventDefault();
                location.href = 'doctor.php?page=dashboard';
            }
            if (e.key === 'b') {
                e.preventDefault();
                var sidebar = document.querySelector('.sidebar');
                if (sidebar) sidebar.classList.toggle('doctor-sidebar-collapsed');
            }
        }
    });

    // وضع التركيز
    window.DoctorFocusMode = function() {
        var on = document.body.classList.toggle('doctor-focus-mode');
        if (on) {
            var exit = document.createElement('a');
            exit.href = '#';
            exit.className = 'doctor-focus-exit btn-secondary';
            exit.textContent = 'خروج من وضع التركيز';
            exit.onclick = function(e) { e.preventDefault(); document.body.classList.remove('doctor-focus-mode'); this.remove(); };
            var header = document.querySelector('.doctor-header .top-bar-right, .top-bar-right');
            if (header) header.insertBefore(exit, header.firstChild);
        } else {
            document.querySelectorAll('.doctor-focus-exit').forEach(function(el) { el.remove(); });
        }
    };

    // لوحة معلومات سريعة
    window.DoctorQuickInfo = {
        modal: null,
        show: function(patientId) {
            if (!patientId) return;
            var self = this;
            if (this.modal) this.hide();
            this.modal = document.createElement('div');
            this.modal.className = 'doctor-quick-info-overlay';
            this.modal.innerHTML = '<div class="doctor-quick-info-modal"><div class="doctor-quick-info-loading">جاري التحميل...</div></div>';
            this.modal.onclick = function(e) { if (e.target === self.modal) self.hide(); };
            document.body.appendChild(this.modal);
            fetch(API + '?action=quick_info&patient_id=' + patientId)
                .then(function(r) { return r.json(); })
                .then(function(data) {
                    if (data.error) {
                        self.modal.querySelector('.doctor-quick-info-modal').innerHTML = '<div style="padding:20px;color:var(--text-muted);">' + data.error + '</div><button onclick="window.DoctorQuickInfo.hide()" class="btn-primary" style="margin:16px;">إغلاق</button>';
                    } else {
                        var p = data.patient;
                        var age = p.date_of_birth ? (new Date().getFullYear() - new Date(p.date_of_birth).getFullYear()) : '-';
                        var html = '<div style="padding:20px;">';
                        html += '<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;border-bottom:1px solid var(--border);padding-bottom:12px;">';
                        html += '<h3 style="margin:0;">' + (p.full_name || '') + '</h3>';
                        html += '<button onclick="window.DoctorQuickInfo.hide()" style="background:transparent;border:none;font-size:1.5rem;cursor:pointer;">&times;</button>';
                        html += '</div>';
                        html += '<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;">';
                        html += '<div><strong>الكود:</strong> ' + (p.patient_code || '-') + '</div>';
                        html += '<div><strong>العمر:</strong> ' + age + ' سنة</div>';
                        html += '<div><strong>الجنس:</strong> ' + (p.gender === 'M' ? 'ذكر' : p.gender === 'F' ? 'أنثى' : '-') + '</div>';
                        if (p.phone) html += '<div><strong>الهاتف:</strong> ' + p.phone + '</div>';
                        html += '</div>';
                        html += '<div style="background:var(--bg-secondary);padding:12px;border-radius:8px;margin-bottom:16px;">';
                        html += '<div style="font-weight:600;margin-bottom:8px;">📊 الإحصائيات</div>';
                        html += '<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px;font-size:0.9rem;">';
                        html += '<div>الطلبات: <strong>' + (p.orders_count || 0) + '</strong></div>';
                        html += '<div>حرجة: <strong style="color:#ef4444;">' + (p.critical_count || 0) + '</strong></div>';
                        if (p.last_order_date) html += '<div>آخر طلب: <strong>' + new Date(p.last_order_date).toLocaleDateString('ar') + '</strong></div>';
                        html += '</div></div>';
                        if (data.last_note) {
                            html += '<div style="background:#fef3c7;padding:12px;border-radius:8px;margin-bottom:16px;">';
                            html += '<div style="font-weight:600;margin-bottom:6px;">📝 آخر ملاحظة</div>';
                            html += '<div style="font-size:0.9rem;color:var(--text-secondary);">' + (data.last_note.content || '').substring(0, 100) + '...</div>';
                            html += '<div style="font-size:0.75rem;color:var(--text-muted);margin-top:6px;">' + new Date(data.last_note.created_at).toLocaleDateString('ar') + '</div>';
                            html += '</div>';
                        }
                        html += '<div style="display:flex;gap:8px;flex-wrap:wrap;">';
                        html += '<a href="doctor.php?page=results&patient_id=' + p.id + '" class="btn-primary" style="flex:1;text-align:center;">عرض النتائج</a>';
                        html += '<a href="doctor.php?page=trend&patient_id=' + p.id + '" class="btn-secondary" style="flex:1;text-align:center;">📈 المقارنة</a>';
                        html += '</div>';
                        html += '</div>';
                        self.modal.querySelector('.doctor-quick-info-modal').innerHTML = html;
                    }
                })
                .catch(function() {
                    if (self.modal) self.modal.querySelector('.doctor-quick-info-modal').innerHTML = '<div style="padding:20px;color:var(--text-muted);">خطأ في التحميل</div><button onclick="window.DoctorQuickInfo.hide()" class="btn-primary" style="margin:16px;">إغلاق</button>';
                });
        },
        hide: function() {
            if (this.modal && this.modal.parentNode) {
                this.modal.parentNode.removeChild(this.modal);
                this.modal = null;
            }
        }
    };

    // بحث محسّن
    window.DoctorEnhancedSearch = {
        init: function() {
            var searchInputs = document.querySelectorAll('input[type="search"], input[name="q"]');
            searchInputs.forEach(function(input) {
                var timeout;
                input.addEventListener('input', function() {
                    clearTimeout(timeout);
                    var q = this.value.trim();
                    if (q.length < 2) return;
                    timeout = setTimeout(function() {
                        window.DoctorSaveSearch && window.DoctorSaveSearch(q, 'all');
                    }, 500);
                });
            });
        }
    };

    // نسخ سريع للمعلومات
    window.DoctorQuickCopy = {
        copy: function(text, label) {
            if (!text) return;
            if (navigator.clipboard && navigator.clipboard.writeText) {
                navigator.clipboard.writeText(text).then(function() {
                    window.DoctorQuickCopy.showToast('تم نسخ ' + (label || 'المعلومات') + ' بنجاح');
                }).catch(function() {
                    window.DoctorQuickCopy.fallbackCopy(text, label);
                });
            } else {
                window.DoctorQuickCopy.fallbackCopy(text, label);
            }
        },
        fallbackCopy: function(text, label) {
            var textarea = document.createElement('textarea');
            textarea.value = text;
            textarea.style.position = 'fixed';
            textarea.style.opacity = '0';
            document.body.appendChild(textarea);
            textarea.select();
            try {
                document.execCommand('copy');
                window.DoctorQuickCopy.showToast('تم نسخ ' + (label || 'المعلومات') + ' بنجاح');
            } catch (err) {
                window.DoctorQuickCopy.showToast('فشل النسخ', 'error');
            }
            document.body.removeChild(textarea);
        },
        showToast: function(message, type) {
            type = type || 'success';
            var toast = document.createElement('div');
            toast.className = 'doctor-toast doctor-toast-' + type;
            toast.textContent = message;
            toast.style.cssText = 'position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:' + (type === 'error' ? '#dc2626' : '#0d9488') + ';color:white;padding:12px 24px;border-radius:8px;z-index:10000;box-shadow:0 4px 12px rgba(0,0,0,0.3);font-size:0.9rem;';
            document.body.appendChild(toast);
            setTimeout(function() {
                toast.style.opacity = '0';
                toast.style.transition = 'opacity 0.3s';
                setTimeout(function() {
                    if (toast.parentNode) toast.parentNode.removeChild(toast);
                }, 300);
            }, 2000);
        },
        copyPatientInfo: function(patientId) {
            fetch(API + '?action=patient_card&patient_id=' + patientId)
                .then(function(r) { return r.json(); })
                .then(function(data) {
                    if (data.patient) {
                        var p = data.patient;
                        var info = 'اسم المريض: ' + (p.full_name || '') + '\n';
                        info += 'الكود: ' + (p.patient_code || '') + '\n';
                        if (p.phone) info += 'الهاتف: ' + p.phone + '\n';
                        if (p.date_of_birth) {
                            var age = new Date().getFullYear() - new Date(p.date_of_birth).getFullYear();
                            info += 'العمر: ' + age + ' سنة\n';
                        }
                        info += 'الجنس: ' + (p.gender === 'M' ? 'ذكر' : p.gender === 'F' ? 'أنثى' : '-') + '\n';
                        info += 'الرابط: ' + location.origin + '/doctor.php?page=results&patient_id=' + patientId;
                        window.DoctorQuickCopy.copy(info, 'بيانات المريض');
                    }
                })
                .catch(function() {
                    window.DoctorQuickCopy.showToast('فشل تحميل البيانات', 'error');
                });
        },
        copyResults: function(orderId) {
            var results = [];
            document.querySelectorAll('.doctor-results-table tbody tr, .table tbody tr').forEach(function(row) {
                var cells = row.querySelectorAll('td');
                if (cells.length >= 3) {
                    var testName = cells[0] ? cells[0].textContent.trim() : '';
                    var value = cells[1] ? cells[1].textContent.trim() : '';
                    var range = cells[2] ? cells[2].textContent.trim() : '';
                    if (testName) {
                        results.push(testName + ': ' + value + ' (' + range + ')');
                    }
                }
            });
            if (results.length > 0) {
                window.DoctorQuickCopy.copy(results.join('\n'), 'النتائج');
            } else {
                window.DoctorQuickCopy.showToast('لم يتم العثور على نتائج', 'error');
            }
        }
    };

    // تهيئة بطاقات المرضى
    document.addEventListener('DOMContentLoaded', function() {
        document.querySelectorAll('[data-patient-id]').forEach(function(el) {
            var pid = el.getAttribute('data-patient-id');
            if (!pid) return;
            el.addEventListener('click', function(e) {
                if (e.ctrlKey || e.metaKey) {
                    e.preventDefault();
                    window.DoctorQuickInfo.show(pid);
                }
            });
            el.addEventListener('mouseenter', function(ev) {
                window.DoctorPatientCard.show(ev.target, pid);
            });
            el.addEventListener('mouseleave', function() {
                setTimeout(function() { window.DoctorPatientCard.hide(); }, 300);
            });
        });

        // تهيئة البحث المحسّن
        window.DoctorEnhancedSearch.init();

        // فحص الإشعارات كل دقيقة (حرجة، تذكيرات، تنبيهات)
        if ('Notification' in window) {
            if (Notification.permission === 'default') {
                Notification.requestPermission();
            }
            window.DoctorNotifications && window.DoctorNotifications.check();
            setInterval(function() { window.DoctorNotifications && window.DoctorNotifications.check(); }, 60000);
        }

        // فحص التنبيهات وعداد الجانب كل 30 ثانية
        setInterval(function() {
            fetch(API + '?action=get_alerts&limit=5&unread=1')
                .then(function(r) { return r.json(); })
                .then(function(data) {
                    if (data.items && data.items.length > 0) {
                        var badge = document.querySelector('.sidebar a[href*="page=alerts"]');
                        if (badge) {
                            var existingBadge = badge.querySelector('span');
                            if (existingBadge) {
                                existingBadge.textContent = data.items.length;
                            } else {
                                var count = document.createElement('span');
                                count.style.cssText = 'padding:2px 6px;background:#0d9488;color:white;border-radius:10px;font-size:0.75rem;margin-right:4px;';
                                count.textContent = data.items.length;
                                badge.appendChild(count);
                            }
                        }
                    }
                })
                .catch(function() {});
        }, 30000);
    });
})();
