/* DIAR-6B.5-R2.6 — visible terminology guard.
   Converts internal workflow codes into user-facing labels and removes technical identifiers
   from standard DIAR screens. No console output and no server-side behavior changes. */
(function () {
    'use strict';

    var body = document.body;
    if (!body || String(body.getAttribute('data-native-sidebar-page') || '').indexOf('diar-') !== 0) {
        return;
    }

    var isArabic = String(document.documentElement.lang || '').toLowerCase().indexOf('ar') === 0;
    var labels = {
        'NEW': ['New', 'جديدة'],
        'ASSIGNED': ['Assigned', 'معيّنة'],
        'UNDER_REVIEW': ['Under review', 'قيد المراجعة'],
        'INFORMATION_REQUIRED': ['Information required', 'مطلوب معلومات'],
        'EVIDENCE_REQUESTED': ['Evidence requested', 'تم طلب أدلة'],
        'EXPLAINED_ACTIVITY': ['Explained activity', 'نشاط مبرر'],
        'CONFIRMED_ANOMALY': ['Confirmed unusual activity', 'نشاط غير معتاد مؤكد'],
        'FALSE_POSITIVE': ['No issue found', 'لم تثبت ملاحظة'],
        'FINDING_PROPOSED': ['Finding proposed', 'نتيجة مقترحة'],
        'SUPERVISOR_REVIEW': ['Supervisor review', 'مراجعة المشرف'],
        'MANAGEMENT_APPROVAL': ['Management approval', 'اعتماد الإدارة'],
        'CORRECTIVE_ACTION': ['Corrective action', 'إجراء تصحيحي'],
        'ESCALATED': ['Escalated', 'مصعّدة'],
        'CLOSED': ['Closed', 'مغلقة'],
        'OPEN': ['Open', 'مفتوحة'],
        'ACTIVE': ['Active', 'نشطة'],
        'INACTIVE': ['Inactive', 'غير نشطة'],
        'FOUNDATION': ['Available', 'متاح'],
        'PREPARED': ['Available', 'متاح'],
        'LIVE': ['Available', 'متاح'],
        'CRITICAL': ['Critical', 'حرجة'],
        'HIGH': ['High', 'عالية'],
        'MEDIUM': ['Medium', 'متوسطة'],
        'LOW': ['Low', 'منخفضة'],
        'INFO': ['Information', 'معلومات'],
        'CASE_CREATED': ['Case created', 'تم إنشاء الحالة'],
        'ASSIGNMENT_CREATED': ['Case assigned', 'تم تعيين الحالة'],
        'ASSIGNMENT_UPDATED': ['Assignment updated', 'تم تحديث التعيين'],
        'STATUS_CHANGED': ['Status updated', 'تم تحديث الحالة'],
        'NOTE_ADDED': ['Note added', 'تمت إضافة ملاحظة'],
        'EVIDENCE_ADDED': ['Evidence added', 'تمت إضافة دليل'],
        'FINDING_RECORDED': ['Finding recorded', 'تم تسجيل النتيجة'],
        'FINDING_PROPOSED': ['Finding proposed', 'تم اقتراح نتيجة'],
        'SUPERVISOR_REVIEWED': ['Supervisor review completed', 'اكتملت مراجعة المشرف'],
        'MANAGEMENT_APPROVED': ['Management approval completed', 'اكتمل اعتماد الإدارة'],
        'CORRECTIVE_ACTION_CREATED': ['Corrective action added', 'تمت إضافة إجراء تصحيحي'],
        'CASE_CLOSED': ['Case closed', 'تم إغلاق الحالة'],
        'CREATED': ['Created', 'تم الإنشاء'],
        'UPDATED': ['Updated', 'تم التحديث'],
        'APPROVED': ['Approved', 'معتمد'],
        'REJECTED': ['Returned for revision', 'أعيدت للمراجعة'],
        'PASS': ['Verified', 'تم التحقق'],
        'CHECK': ['Review needed', 'تحتاج مراجعة']
    };

    var embedded = [
        ['NJCH · ORANJC', 'NJCH'],
        ['MNH · ORAMNH', 'MNH'],
        ['ORANJC', 'NJCH'],
        ['ORAMNH', 'MNH'],
        ['DIAR-6A', isArabic ? 'المعالجة الشهرية' : 'monthly processing'],
        ['Database Link', isArabic ? 'الوصول إلى بيانات المستشفى' : 'hospital data access'],
        ['database link', isArabic ? 'الوصول إلى بيانات المستشفى' : 'hospital data access'],
        ['Source DB', isArabic ? 'المستشفى' : 'Hospital'],
        ['source DB', isArabic ? 'المستشفى' : 'hospital'],
        ['Snapshot ID', isArabic ? 'مرجع التقرير الشهري' : 'Monthly report reference'],
        ['Raw Unit', isArabic ? 'الوحدة المسجلة' : 'Recorded unit'],
        ['Raw unit', isArabic ? 'الوحدة المسجلة' : 'Recorded unit'],
        ['SHA-256', isArabic ? 'مرجع سلامة الملف' : 'File integrity reference']
    ];

    function mapped(value) {
        var clean = String(value || '').trim();
        if (labels[clean]) {
            return labels[clean][isArabic ? 1 : 0];
        }
        var result = String(value || '');
        for (var i = 0; i < embedded.length; i += 1) {
            result = result.split(embedded[i][0]).join(embedded[i][1]);
        }
        return result;
    }

    function shouldSkip(node) {
        var parent = node && node.parentElement;
        if (!parent) { return true; }
        var tag = String(parent.tagName || '').toUpperCase();
        return tag === 'SCRIPT' || tag === 'STYLE' || tag === 'PRE' || tag === 'CODE' ||
            tag === 'TEXTAREA' || parent.closest('[data-diar-technical-only="true"]') !== null;
    }

    function updateTextNode(node) {
        if (!node || node.nodeType !== 3 || shouldSkip(node)) { return; }
        var oldValue = node.nodeValue || '';
        var newValue = mapped(oldValue);
        if (newValue !== oldValue) { node.nodeValue = newValue; }
    }

    function updateElement(element) {
        if (!element || element.nodeType !== 1) { return; }

        if (element.matches('.cases-technical-contract, details.technical-contract, details.evidence-raw-codes')) {
            element.setAttribute('data-diar-technical-only', 'true');
            element.hidden = true;
            return;
        }

        ['title', 'aria-label', 'placeholder'].forEach(function (attribute) {
            if (!element.hasAttribute(attribute)) { return; }
            var oldValue = element.getAttribute(attribute) || '';
            var newValue = mapped(oldValue);
            if (newValue !== oldValue) { element.setAttribute(attribute, newValue); }
        });

        var walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, false);
        var textNode;
        while ((textNode = walker.nextNode())) { updateTextNode(textNode); }
    }

    updateElement(body);

    if (typeof MutationObserver !== 'undefined') {
        new MutationObserver(function (mutations) {
            mutations.forEach(function (mutation) {
                if (mutation.type === 'characterData') {
                    updateTextNode(mutation.target);
                    return;
                }
                Array.prototype.forEach.call(mutation.addedNodes || [], function (node) {
                    if (node.nodeType === 3) { updateTextNode(node); }
                    else if (node.nodeType === 1) { updateElement(node); }
                });
            });
        }).observe(body, { childList: true, subtree: true, characterData: true });
    }
}());
