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

    var API = 'doctor_api.php';
    function csrfToken() {
        return window.DOCTOR_CSRF_TOKEN
            || (document.querySelector('meta[name="csrf-token"]') || {}).content
            || (document.querySelector('input[name="_csrf"]') || {}).value
            || '';
    }

    function withCsrfFormData(fd) {
        if (!fd) fd = new FormData();
        if (!fd.has('_csrf')) {
            var t = csrfToken();
            if (t) fd.append('_csrf', t);
        }
        return fd;
    }

    // بطاقة المريض السريعة (عند المرور بالماوس)
    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;
            }
        }
    };

    // إشعارات المتصفح - موحّدة (حفظ آخر قيم في الجلسة لتجنّب تكرار الـ toast بعد كل تحميل صفحة)
    window.DoctorNotifications = {
        lastCheck: (function() {
            var def = { critical: 0, overdue: 0, alerts: 0 };
            try {
                var s = sessionStorage.getItem('doctor_notif_last');
                if (s) {
                    var o = JSON.parse(s);
                    if (typeof o.critical === 'number') def.critical = o.critical;
                    if (typeof o.overdue === 'number') def.overdue = o.overdue;
                    if (typeof o.alerts === 'number') def.alerts = o.alerts;
                }
            } catch (e) {}
            return def;
        })(),
        _persistLast: function() {
            try {
                sessionStorage.setItem('doctor_notif_last', JSON.stringify(this.lastCheck));
            } catch (e) {}
        },
        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 };
                    self._persistLast();
                })
                .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.style.cssText += 'position:relative;isolation:isolate;overflow:hidden;';
            var btnStyle = 'display:inline-block;margin-top:10px;padding:8px 14px;background-color:#0d9488;color:#fff !important;border-radius:8px;text-decoration:none;font-size:0.85rem;white-space:nowrap;line-height:1.35;position:relative;z-index:2;box-shadow:0 1px 2px rgba(0,0,0,0.08);';
            toast.innerHTML = '<div style="font-weight:600;margin-bottom:4px;position:relative;z-index:1;">' + (title || 'إشعار') + '</div><div style="color:#64748b;font-size:0.9rem;position:relative;z-index:1;">' + (body || '') + '</div>' +
                (actionUrl ? '<a href="' + actionUrl + '" style="' + btnStyle + '">عرض ←</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 = withCsrfFormData(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.DoctorUnifiedInbox = {
        load: function() {
            var box = document.getElementById('doctorUnifiedInbox');
            if (!box) return;
            fetch(API + '?action=get_inbox&limit=10')
                .then(function(r) { return r.json(); })
                .then(function(data) {
                    var items = (data && data.items) ? data.items : [];
                    if (!items.length) {
                        box.innerHTML = '<p style="color:var(--text-muted);margin:0;padding:8px 0;">لا توجد عناصر تحتاج متابعة الآن.</p>';
                        return;
                    }
                    var iconByType = {
                        critical_result: '⚠️',
                        overdue_reminder: '⏰',
                        alert: '🔔',
                        task: '✅'
                    };
                    box.innerHTML = items.map(function(item) {
                        var icon = iconByType[item.type] || 'ℹ️';
                        var title = item.title || 'عنصر متابعة';
                        var subtitle = item.subtitle || '';
                        var meta = item.meta ? ('<span style="color:var(--text-muted);font-size:0.8rem;">' + item.meta + '</span>') : '';
                        var url = item.url || 'doctor.php?page=dashboard';
                        return '<a href="' + url + '" style="display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;text-decoration:none;color:inherit;background:var(--bg-primary);">' +
                            '<span style="font-size:1.1rem;line-height:1.2;">' + icon + '</span>' +
                            '<span style="display:flex;flex-direction:column;gap:2px;min-width:0;flex:1;">' +
                            '<strong style="font-size:0.92rem;line-height:1.35;">' + title + '</strong>' +
                            '<span style="color:var(--text-secondary);font-size:0.84rem;line-height:1.35;">' + subtitle + '</span>' +
                            meta +
                            '</span>' +
                            '<span style="color:var(--primary,#0d9488);font-size:0.82rem;white-space:nowrap;">فتح ←</span>' +
                            '</a>';
                    }).join('');
                })
                .catch(function() {
                    box.innerHTML = '<p style="color:#b91c1c;margin:0;padding:8px 0;">تعذر تحميل صندوق الوارد حالياً.</p>';
                });
        }
    };

    // نسخ سريع للمعلومات
    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);

        // صندوق الوارد الموحد
        window.DoctorUnifiedInbox && window.DoctorUnifiedInbox.load();
        setInterval(function() {
            window.DoctorUnifiedInbox && window.DoctorUnifiedInbox.load();
        }, 60000);
    });
})();
