// ==========================================
// AI Module - Easy ERP Plugin
// ==========================================
// هذا الموديول منفصل تماماً عن النظام الأصلي
// وظيفته: تقديم مساعد ذكي (Chatbot) واكتشاف الأخطاء.

(function() {
    // Module Logic (Defined before HTML injection to avoid reference errors)
    window.aiModule = {
        apiKey: localStorage.getItem('erp_ai_api_key') || '',
        knowledgeBase: localStorage.getItem('erp_ai_kb') || '',
        anomalyChecked: false,
        chatHistory: JSON.parse(localStorage.getItem('erp_ai_chat_history')) || [],
        telemetry: {
            slowApis: [],
            totalErrors: 0
        },

        init: function() {
            this.setupTelemetry();
            const apiKeyInput = document.getElementById('ai-api-key');
            if(apiKeyInput) apiKeyInput.value = this.apiKey;
            
            const kbInput = document.getElementById('ai-knowledge-base');
            if(kbInput) kbInput.value = this.knowledgeBase;
            
            // Load history into UI
            const body = document.getElementById('ai-chat-body');
            body.innerHTML = ''; // clear default welcome
            
            if (this.chatHistory.length === 0) {
                this.addMessage('bot', 'مرحباً أستاذ محمود! أنا مساعدك الذكي والمستشار التقني الخاص بك في Easy ERP. يمكنني إعطاؤك بيانات النظام، فتح الشاشات، وتقديم نصائح برمجية ذكية لتطوير النظام. كيف يمكنني مساعدتك؟');
            } else {
                for (const msg of this.chatHistory) {
                    this.addMessage(msg.role === 'user' ? 'user' : 'bot', msg.content);
                }
            }
            
            // Periodically check for anomalies when data loads
            setInterval(() => this.checkForAnomalies(), 10000); // Check every 10 seconds
        },

        toggleChat: function() {
            const chatWindow = document.getElementById('ai-chat-window');
            const btn = document.getElementById('ai-floating-btn');
            if (chatWindow.style.display === 'flex') {
                chatWindow.style.display = 'none';
                btn.style.display = 'flex';
            } else {
                chatWindow.style.display = 'flex';
                btn.style.display = 'none';
                if(!this.apiKey) {
                    this.addMessage('bot', '⚠️ يبدو أنك لم تقم بإدخال مفتاح الـ API. يرجى الضغط على علامة الترس ⚙️ بالأعلى لإدخاله لتفعيل الذكاء الاصطناعي.');
                }
            }
        },

        toggleSettings: function() {
            const modal = document.getElementById('ai-settings-modal');
            modal.style.display = modal.style.display === 'flex' ? 'none' : 'flex';
        },

        toggleInsights: function() {
            const modal = document.getElementById('ai-insights-modal');
            if (modal.style.display === 'flex') {
                modal.style.display = 'none';
            } else {
                modal.style.display = 'flex';
                this.generateInsights();
            }
        },

        takeBackup: async function() {
            const btn = document.getElementById('ai-backup-btn');
            btn.innerHTML = '⏳ جاري النسخ...';
            btn.disabled = true;
            try {
                // Since the app runs on static hosting (cPanel), we backup localStorage directly to a file
                const data = JSON.stringify(localStorage);
                const blob = new Blob([data], {type: 'application/json'});
                const url = URL.createObjectURL(blob);
                const a = document.createElement('a');
                a.href = url;
                
                const dateStr = new Date().toISOString().replace(/[:.]/g, '-');
                a.download = `EasyERP_Data_Backup_${dateStr}.json`;
                
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
                URL.revokeObjectURL(url);

                btn.innerHTML = '✅ تم تحميل النسخة الاحتياطية بنجاح';
                btn.style.background = '#2ecc71';
            } catch (err) {
                btn.innerHTML = '❌ فشل النسخ';
                alert('حدث خطأ أثناء إنشاء النسخة الاحتياطية.');
            }
        },

        generateInsights: async function() {
            const contentDiv = document.getElementById('ai-insights-result');
            contentDiv.innerHTML = '<div style="text-align:center; padding: 20px;">⏳ جاري تحليل بيانات النظام وسلوك قاعدة البيانات...</div>';
            
            if (!this.apiKey) {
                contentDiv.innerHTML = '<div style="color:red; text-align:center;">يرجى إدخال مفتاح الـ API في الإعدادات أولاً!</div>';
                return;
            }

            const prompt = `أنا نظام ERP. لدي تقرير المستشعر التالي:
- عدد الأخطاء الصامتة: ${this.telemetry.totalErrors}
- أبطأ العمليات مؤخراً: ${JSON.stringify(this.telemetry.slowApis)}
- حجم الأصناف: ${window.currentItems?.length || 0}
كمهندس أنظمة، قدم لي "اقتراح تطويري واحد" لتحسين سرعة قاعدة البيانات أو كفاءة النظام بناءً على هذه البيانات. اكتب الاقتراح بشكل منظم:
1. المشكلة.
2. الفكرة.
3. الكود المقترح (يرجى كتابة كود Client-Side Frontend JavaScript فقط للعمل في المتصفح. يمنع تماماً استخدام Node.js أو require أو أي كود Backend لأن الكود سيتم تشغيله وتجربته فوراً داخل المتصفح).`;
            
            try {
                let response = '';
                if (this.apiKey.startsWith('sk-')) response = await this.callOpenAIAPI(prompt, '');
                else if (this.apiKey.startsWith('gsk_')) response = await this.callGroqAPI(prompt, '');
                else response = await this.callGeminiAPI(prompt, '', true); // Try Pro
                
                // Add Live Test Button functionality
                let htmlResponse = response.replace(/```javascript([\s\S]*?)```/g, (match, code) => {
                    const encodedCode = encodeURIComponent(code.trim()).replace(/'/g, "%27");
                    return `
                        <div style="position:relative; background:#282c34; color:#abb2bf; padding:15px; border-radius:5px; margin: 10px 0; text-align:left; direction:ltr; font-family:monospace;">
                            <button onclick="try{ eval(decodeURIComponent('${encodedCode}')); alert('تم تنفيذ الكود في المتصفح بنجاح! راجع الـ Console.'); }catch(e){ alert('خطأ في التنفيذ: ' + e.message); }" style="position:absolute; top:5px; right:5px; background:#2ecc71; color:white; border:none; padding:5px 10px; border-radius:4px; cursor:pointer; font-size:12px;">▶ اختبار حي</button>
                            <pre style="margin:0; overflow-x:auto;">${code}</pre>
                        </div>
                    `;
                });

                contentDiv.innerHTML = `
                    <div style="font-size:14px; color:#333; line-height: 1.6; white-space: pre-wrap; background:#f4f4f4; padding:10px; border-radius:5px; height: 300px; overflow-y: auto; text-align:right;">${htmlResponse}</div>
                    <div style="margin-top:15px; border-top: 1px solid #ccc; padding-top: 10px; text-align:center;">
                        <p style="font-size:12px; color:#555;">🛡️ هل تريد تنفيذ هذا الكود؟ قم بأخذ نسخة احتياطية أولاً لحماية بياناتك!</p>
                        <button id="ai-backup-btn" onclick="window.aiModule.takeBackup()" style="padding:10px 15px; background:#e74c3c; color:white; border:none; border-radius:4px; cursor:pointer; font-weight:bold;">أخذ نسخة احتياطية من النظام الآن</button>
                    </div>
                `;
            } catch (e) {
                contentDiv.innerHTML = `<div style="color:red; text-align:center;">فشل توليد الاقتراحات: ${e.message}</div>`;
            }
        },

        startVoiceRecognition: function() {
            if (this.recognition && this.isListening) {
                this.recognition.stop();
                return;
            }

            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
            if (!SpeechRecognition) {
                alert('عذراً، متصفحك لا يدعم خاصية التحدث الصوتي. يرجى استخدام جوجل كروم الحديث.');
                return;
            }
            
            this.recognition = new SpeechRecognition();
            this.recognition.lang = 'ar-EG'; // Changed to Egyptian Arabic for better accuracy
            this.recognition.interimResults = false;
            this.recognition.maxAlternatives = 1;
            
            const micBtn = document.getElementById('ai-mic-btn');
            const input = document.getElementById('ai-chat-input');
            
            this.recognition.onstart = () => {
                this.isListening = true;
                micBtn.style.background = '#e74c3c';
                micBtn.textContent = '🔴';
                input.placeholder = 'جاري الاستماع إليك (تحدث الآن)...';
            };
            
            this.recognition.onresult = (event) => {
                const transcript = event.results[0][0].transcript;
                input.value = transcript;
                this.sendMessage();
            };
            
            this.recognition.onerror = (event) => {
                console.error('Speech recognition error', event.error);
                if (event.error !== 'aborted') {
                    alert('حدث خطأ أثناء الاستماع: ' + event.error);
                }
            };
            
            this.recognition.onend = () => {
                this.isListening = false;
                micBtn.style.background = '#f39c12';
                micBtn.textContent = '🎤';
                input.placeholder = 'اكتب سؤالك هنا...';
            };
            
            this.recognition.start();
        },

        setupTelemetry: function() {
            // Intercept errors
            const originalError = console.error;
            console.error = (...args) => {
                this.telemetry.totalErrors++;
                originalError.apply(console, args);
            };
            
            // Intercept fetch for slow queries
            const originalFetch = window.fetch;
            window.fetch = async (...args) => {
                const startTime = performance.now();
                try {
                    // Fix 'Illegal invocation' by binding to window
                    const response = await originalFetch.apply(window, args);
                    const duration = performance.now() - startTime;
                    if (duration > 300 && typeof args[0] === 'string' && args[0].includes('/api/')) {
                        this.telemetry.slowApis.push({ url: args[0], time_ms: Math.round(duration) });
                        if (this.telemetry.slowApis.length > 5) this.telemetry.slowApis.shift();
                        
                        // Notify via chat icon gently
                        const btn = document.getElementById('ai-floating-btn');
                        if(btn) {
                            btn.style.animation = 'pulseWarning 1s 3';
                        }
                    }
                    return response;
                } catch (err) {
                    throw err;
                }
            };
        },

        saveSettings: function() {
            const key = document.getElementById('ai-api-key').value.trim();
            const kb = document.getElementById('ai-knowledge-base').value.trim();
            
            localStorage.setItem('erp_ai_api_key', key);
            localStorage.setItem('erp_ai_kb', kb);
            
            this.apiKey = key;
            this.knowledgeBase = kb;
            
            this.toggleSettings();
            this.addMessage('bot', '✅ تم حفظ الإعدادات وتحديث قاعدة المعرفة بنجاح! الذكاء الاصطناعي أصبح أكثر دراية بشركتك الآن.');
        },

        clearMemory: function() {
            this.chatHistory = [];
            localStorage.removeItem('erp_ai_chat_history');
            const body = document.getElementById('ai-chat-body');
            body.innerHTML = '';
            this.addMessage('bot', '🧹 تم مسح الذاكرة بالكامل وبدأنا محادثة جديدة!');
        },

        addMessage: function(sender, text) {
            const body = document.getElementById('ai-chat-body');
            const msgDiv = document.createElement('div');
            msgDiv.className = `ai-msg ${sender}`;
            msgDiv.textContent = text;
            body.appendChild(msgDiv);
            body.scrollTop = body.scrollHeight;
        },

        sendMessage: async function() {
            const input = document.getElementById('ai-chat-input');
            const userText = input.value.trim();
            if (!userText) return;

            this.addMessage('user', userText);
            input.value = '';

            if (!this.apiKey) {
                setTimeout(() => {
                    this.addMessage('bot', '❌ عذراً، لا يمكنني الاتصال بالذكاء الاصطناعي بدون مفتاح الـ API. (هذه رسالة محاكاة).');
                }, 1000);
                return;
            }

            // Real AI Request
            this.addMessage('bot', '⏳ جاري التفكير وجمع البيانات...');
            try {
                // Collect context data securely
                const context = await this.buildContext();
                let response = '';
                
                if (this.apiKey.startsWith('sk-')) {
                    response = await this.callOpenAIAPI(userText, context);
                } else if (this.apiKey.startsWith('gsk_')) {
                    response = await this.callGroqAPI(userText, context);
                } else {
                    response = await this.callGeminiAPI(userText, context);
                }
                
                // Process Agent Actions (Navigation)
                const navMatch = response.match(/\[NAVIGATE:([^\]]+)\]/);
                if (navMatch) {
                    const pageId = navMatch[1].trim();
                    if (pageId.endsWith('.html')) {
                        // External page navigation
                        if(document.getElementById('loading-overlay')) document.getElementById('loading-overlay').style.display='flex';
                        window.location.href = pageId;
                    } else {
                        // SPA view navigation
                        const isIndex = window.location.pathname.endsWith('index.html') || window.location.pathname.endsWith('/');
                        if (isIndex) {
                            const navItem = document.querySelector(`li[data-view="${pageId}"]`);
                            if (navItem) navItem.click(); // Trigger frontend navigation
                        } else {
                            if(document.getElementById('loading-overlay')) document.getElementById('loading-overlay').style.display='flex';
                            window.location.href = 'index.html?view=' + pageId;
                        }
                    }
                    response = response.replace(/\[NAVIGATE:[^\]]+\]/g, '').trim();
                }
                
                // Remove loading message
                const body = document.getElementById('ai-chat-body');
                body.removeChild(body.lastChild);
                
                this.addMessage('bot', response);
                
                // Save to memory
                this.chatHistory.push({ role: 'user', content: userText });
                this.chatHistory.push({ role: 'assistant', content: response });
                
                // Limit memory to last 50 messages (25 pairs) to save tokens
                if (this.chatHistory.length > 50) {
                    this.chatHistory = this.chatHistory.slice(-50);
                }
                localStorage.setItem('erp_ai_chat_history', JSON.stringify(this.chatHistory));
                
            } catch (error) {
                const body = document.getElementById('ai-chat-body');
                body.removeChild(body.lastChild);
                this.addMessage('bot', '❌ حدث خطأ: ' + error.message);
            }
        },

        buildContext: async function() {
            let items = [], transactions = [], warehouses = [];
            
            // Bypass syncWithServer to avoid hangs, read directly from IndexedDB safely
            try {
                await new Promise((resolve) => {
                    let isResolved = false;
                    const safeResolve = () => { if(!isResolved){ isResolved=true; resolve(); } };
                    setTimeout(safeResolve, 2000); // 2 second timeout for DB read
                    const req = indexedDB.open('EasyErpSmartDB', 1);
                    req.onsuccess = (e) => {
                        const db = e.target.result;
                        let storesToRead = ['items', 'transactions', 'warehouses'].filter(s => db.objectStoreNames.contains(s));
                        if (storesToRead.length === 0) {
                            db.close();
                            return safeResolve();
                        }
                        
                        const tx = db.transaction(storesToRead, 'readonly');
                        let completed = 0;
                        
                        storesToRead.forEach(storeName => {
                            const req = tx.objectStore(storeName).getAll();
                            req.onsuccess = () => {
                                if(storeName === 'items') items = req.result || [];
                                if(storeName === 'transactions') transactions = req.result || [];
                                if(storeName === 'warehouses') warehouses = req.result || [];
                                completed++;
                                if(completed === storesToRead.length) { db.close(); safeResolve(); }
                            };
                            req.onerror = () => {
                                completed++;
                                if(completed === storesToRead.length) { db.close(); safeResolve(); }
                            };
                        });
                    };
                    req.onerror = () => safeResolve();
                });
            } catch(e) { console.error('AI DB error:', e); }
            
            const totalItems = items.length;
            const recentTransactions = transactions.slice(-10).map(t => `نوع: ${t.type}, مبلغ: ${t.total}, تاريخ: ${t.date}`);
            
            let context = `أنت مساعد ذكي ومستشار تقني مدمج في نظام Easy ERP الخاص بالسيد محمود الميهي.
بصفتك مستشاراً تقنياً، يمكنك اقتراح أفكار برمجية ذكية ونصائح لتطوير نظامه الإداري والبرمجي كلما طلب منك ذلك.`;

            if (this.knowledgeBase) {
                context += `\n\n**قاعدة المعرفة الخاصة بالشركة (RAG):**\nاللوائح والقوانين والسياسات التالية هي المرجعية الأساسية لك للإجابة على الأسئلة الإدارية والعملية للمستخدم:\n"""\n${this.knowledgeBase}\n"""\nأجب بناءً على هذه اللوائح حصراً إذا كان السؤال يتعلق بها.\n`;
            }

            context += `\nتفضل بملخص سريع للبيانات الحالية:
- الأصناف: ${totalItems} | المخازن: ${warehouses.length}
- الحركات: ${recentTransactions.join(' | ')}

**قدراتك الخارقة كـ AI Agent:**
إذا طلب منك المستخدم فتح أو الذهاب إلى صفحة معينة في النظام، أضف هذا الكود السري في أي مكان في ردك:
[NAVIGATE:view_name]
**يجب أن تختار view_name بدقة من هذه القائمة فقط ولا تخترع أسماء أخرى:**
لوحة القيادة = dashboard
الحسابات والقيود = accounting
الخزينة والبنوك = vouchers
تسويات العهد = settlements
المبيعات = sales
مرتجعات المبيعات = sales-returns
المشتريات = purchases
مرتجعات المشتريات = purchases-returns
إدارة المخازن = warehouses
جهات اتصال ومعاملات = contacts
دليل الأصناف = items
الخرسانة الجاهزة = ready_mix.html
ميزان المراجعة = trial_balance.html
الموارد البشرية = hr.html
كارت الصنف = item-card
المشاريع = projects
عقود مقاولي الباطن = subcontracts
مستخلصات مقاولي الباطن = subcontract-abstracts
مستخلصات عملاء = client-abstracts
أرصدة المخزون = balances
مستندات المخزون = transactions
الإعدادات = settings

قم بالإجابة بشكل مهني، وإذا طُلب منك الانتقال لصفحة، رد برسالة ترحيبية وضع كود الانتقال لكي ينفذه النظام سراً.`;
            
            return context;
        },

        callGeminiAPI: async function(prompt, context, usePro = false, retries = 0) {
            if (!this.apiKey || this.apiKey.trim() === '') {
                throw new Error('لم تقم بإدخال مفتاح الـ API. يرجى الضغط على علامة الترس لإدخال المفتاح.');
            }

            // Auto-detect OpenAI key (starts with sk-)
            if (this.apiKey.startsWith('sk-')) {
                return this.callOpenAIAPI(prompt, context);
            }
            // Auto-detect Groq key (starts with gsk_)
            if (this.apiKey.startsWith('gsk_')) {
                return this.callGroqAPI(prompt, context);
            }

            let modelName = 'gemini-flash-latest';
            if (usePro === true) modelName = 'gemini-pro-latest';
            if (usePro === 'legacy') modelName = 'gemini-flash-latest'; // Fallback to flash

            const url = `https://generativelanguage.googleapis.com/v1beta/models/${modelName}:generateContent?key=${this.apiKey}`;
            
            const contents = [
                { role: 'user', parts: [{ text: context }] },
                { role: 'model', parts: [{ text: 'علم، سألتزم بهذه التعليمات.' }] }
            ];
            
            for (const msg of this.chatHistory) {
                contents.push({
                    role: msg.role === 'assistant' ? 'model' : 'user',
                    parts: [{ text: msg.content }]
                });
            }
            contents.push({ role: 'user', parts: [{ text: prompt }] });

            const requestBody = { contents: contents };

            try {
                const controller = new AbortController();
                const timeoutId = setTimeout(() => controller.abort(), 15000); // 15 seconds timeout
                
                const res = await fetch(url, {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify(requestBody),
                    signal: controller.signal
                });
                clearTimeout(timeoutId);

                const data = await res.json();
                
                if (!res.ok) {
                    let errMsg = data.error && data.error.message ? data.error.message : 'فشل الاتصال بالخادم.';
                    
                    if (usePro === true && errMsg.includes('is not found')) {
                        return this.callGeminiAPI(prompt, context, false); // If pro fails, fallback to flash
                    }

                    if (errMsg.toLowerCase().includes('high demand') || errMsg.toLowerCase().includes('overloaded') || res.status === 429 || res.status === 503) {
                        if (retries < 100) {
                            console.log('Gemini API high demand, retrying in 4 seconds... (Retry ' + (retries + 1) + ')');
                            const body = document.getElementById('ai-chat-body');
                            if (body && body.lastChild) {
                                body.lastChild.textContent = '⏳ السيرفرات مشغولة... جاري المحاولة (' + (retries + 1) + ')';
                            }
                            await new Promise(r => setTimeout(r, 4000));
                            return this.callGeminiAPI(prompt, context, usePro, retries + 1);
                        } else {
                            errMsg = 'يوجد ضغط هائل على سيرفرات جوجل للذكاء الاصطناعي في هذه اللحظة (High Demand). يرجى المحاولة بعد عدة ثوانٍ.';
                        }
                    }
                    if(errMsg.includes('User location')) {
                        errMsg = 'خدمة Gemini محجوبة في بلدك. يرجى استخدام مفتاح Groq المجاني بدلاً منه.';
                    } else if (errMsg.includes('API key not valid')) {
                        errMsg = 'مفتاح الـ API غير صحيح، تأكد من نسخه بالكامل بدون مسافات.';
                    }
                    throw new Error(errMsg);
                }
                
                if (data.candidates && data.candidates[0].content.parts[0].text) {
                    return data.candidates[0].content.parts[0].text;
                } else {
                    return 'لم أتمكن من استيعاب الإجابة بشكل صحيح.';
                }
            } catch (e) {
                if(e.message === 'Failed to fetch') throw new Error('لا يوجد اتصال بالإنترنت أو الخادم محجوب.');
                throw e;
            }
        },

        callGroqAPI: async function(prompt, context) {
            const url = `https://api.groq.com/openai/v1/chat/completions`;
            const messages = [
                { role: 'system', content: context },
                ...this.chatHistory,
                { role: 'user', content: prompt }
            ];
            const requestBody = {
                model: 'llama-3.3-70b-versatile',
                messages: messages
            };

            try {
                const res = await fetch(url, {
                    method: 'POST',
                    headers: { 
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${this.apiKey}`
                    },
                    body: JSON.stringify(requestBody)
                });

                const data = await res.json();
                
                if (!res.ok) {
                    let errMsg = data.error && data.error.message ? data.error.message : 'فشل الاتصال بخادم Groq.';
                    if (errMsg.includes('Invalid API Key')) {
                        errMsg = 'مفتاح Groq غير صحيح.';
                    }
                    throw new Error(errMsg);
                }
                
                if (data.choices && data.choices[0].message.content) {
                    return data.choices[0].message.content;
                } else {
                    return 'لم أتمكن من استيعاب الإجابة بشكل صحيح من Groq.';
                }
            } catch (e) {
                if(e.message === 'Failed to fetch') throw new Error('لا يوجد اتصال بالإنترنت مع Groq.');
                throw e;
            }
        },

        callOpenAIAPI: async function(prompt, context) {
            const url = `https://api.openai.com/v1/chat/completions`;
            const messages = [
                { role: 'system', content: context },
                ...this.chatHistory,
                { role: 'user', content: prompt }
            ];
            const requestBody = {
                model: 'gpt-4o-mini',
                messages: messages
            };

            try {
                const res = await fetch(url, {
                    method: 'POST',
                    headers: { 
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${this.apiKey}`
                    },
                    body: JSON.stringify(requestBody)
                });

                const data = await res.json();
                
                if (!res.ok) {
                    let errMsg = data.error && data.error.message ? data.error.message : 'فشل الاتصال بخادم OpenAI.';
                    if (errMsg.includes('Incorrect API key')) {
                        errMsg = 'مفتاح OpenAI غير صحيح.';
                    } else if (errMsg.includes('insufficient_quota') || errMsg.includes('exceeded your current quota')) {
                        errMsg = 'لقد استنفدت رصيد الـ API الخاص بـ OpenAI. يرجى شحن الرصيد.';
                    }
                    throw new Error(errMsg);
                }
                
                if (data.choices && data.choices[0].message.content) {
                    return data.choices[0].message.content;
                } else {
                    return 'لم أتمكن من استيعاب الإجابة بشكل صحيح من OpenAI.';
                }
            } catch (e) {
                if(e.message === 'Failed to fetch') throw new Error('لا يوجد اتصال بالإنترنت.');
                throw e;
            }
        },

        checkForAnomalies: function() {
            if (!window.currentTransactions || window.currentTransactions.length === 0) return;
            
            // Check for suspiciously high transaction values (e.g., > 500,000)
            const recentTransactions = window.currentTransactions.slice(-20);
            for (const t of recentTransactions) {
                // If we haven't alerted for this anomaly yet
                const anomalyKey = 'anomaly_alerted_' + t.id;
                if (t.total > 500000 && !localStorage.getItem(anomalyKey)) {
                    this.addMessage('alert', `🚨 إشعار أمني: تم رصد حركة بمبلغ ضخم غير مألوف بقيمة ${t.total} ج.م في تاريخ ${t.date} برقم ${t.id}. يرجى مراجعتها.`);
                    localStorage.setItem(anomalyKey, 'true');
                    
                    // Show chat button animation if closed
                    const btn = document.getElementById('ai-floating-btn');
                    if(btn && btn.style.display !== 'none') {
                        btn.style.boxShadow = '0 0 20px var(--danger)';
                        setTimeout(() => btn.style.boxShadow = '', 3000);
                    }
                }
            }
        }
    };

    // 1. Inject HTML Structure for AI Widget
    const aiHTML = `
        <style>
            #ai-widget-container { position: fixed; bottom: 20px; right: 20px; z-index: 9999; font-family: 'Cairo', sans-serif; }
            #ai-floating-btn { width: 60px; height: 60px; border-radius: 50%; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; box-shadow: 0 4px 15px rgba(0,0,0,0.3); font-size: 24px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease; }
            #ai-floating-btn:hover { transform: scale(1.1); }
            @keyframes pulseWarning { 0% { box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7); } 70% { box-shadow: 0 0 0 15px rgba(231, 76, 60, 0); } 100% { box-shadow: 0 0 0 0 rgba(231, 76, 60, 0); } }
            
            #ai-chat-window { display: none; width: 350px; height: 500px; background: #fff; border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); flex-direction: column; overflow: hidden; border: 1px solid #ddd; }
            #ai-chat-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px; display: flex; justify-content: space-between; align-items: center; }
            #ai-chat-header h3 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }
            #ai-chat-body { flex: 1; padding: 15px; overflow-y: auto; background: #f9f9f9; display: flex; flex-direction: column; gap: 10px; }
            #ai-chat-input-area { padding: 10px; background: #fff; border-top: 1px solid #ddd; display: flex; gap: 10px; }
            #ai-chat-input-area input { flex: 1; padding: 10px; border: 1px solid #ccc; border-radius: 20px; outline: none; }
            #ai-chat-input-area button { background: #764ba2; color: white; border: none; border-radius: 50%; width: 40px; height: 40px; cursor: pointer; display: flex; align-items: center; justify-content: center; }
            
            .ai-msg { max-width: 80%; padding: 10px 14px; border-radius: 15px; font-size: 14px; line-height: 1.4; }
            .ai-msg.user { background: #667eea; color: white; align-self: flex-start; border-bottom-right-radius: 2px; }
            .ai-msg.bot { background: #fff; color: #333; border: 1px solid #ddd; align-self: flex-end; border-bottom-left-radius: 2px; }
            .ai-msg.alert { background: #fff3cd; color: #856404; border: 1px solid #ffeeba; align-self: center; width: 90%; text-align: center; border-radius: 8px; font-size: 12px; }
            
            #ai-settings-modal, #ai-insights-modal { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); z-index: 10; flex-direction: column; align-items: center; justify-content: center; padding: 20px; box-sizing: border-box; }
            #ai-settings-content, #ai-insights-content { background: white; padding: 20px; border-radius: 10px; width: 100%; }
        </style>

        <div id="ai-widget-container">
            <div id="ai-chat-window">
                <div id="ai-chat-header">
                    <h3>🤖 المساعد الذكي</h3>
                    <div>
                        <button onclick="window.aiModule.toggleInsights()" style="background:none; border:none; color:yellow; cursor:pointer; font-size:18px; margin-right: 5px;" title="اقتراحات التطوير">💡</button>
                        <button onclick="window.aiModule.toggleSettings()" style="background:none; border:none; color:white; cursor:pointer; font-size:16px;">⚙️</button>
                        <button onclick="window.aiModule.toggleChat()" style="background:none; border:none; color:white; cursor:pointer; font-size:16px; margin-right: 5px;">✖</button>
                    </div>
                </div>
                
                <div id="ai-insights-modal">
                    <div id="ai-insights-content">
                        <h4 style="margin-top:0; color:#764ba2;">💡 مقترحات التطوير (AI Insights)</h4>
                        <div id="ai-insights-result"></div>
                        <div style="text-align:left; margin-top:10px;">
                            <button onclick="window.aiModule.toggleInsights()" style="padding:5px 10px; background:#ddd; border:none; border-radius:4px; cursor:pointer;">إغلاق</button>
                        </div>
                    </div>
                </div>
                
                <div id="ai-settings-modal">
                    <div id="ai-settings-content">
                        <h4 style="margin-top:0;">إعدادات الذكاء الاصطناعي وقاعدة المعرفة</h4>
                        
                        <label style="font-size:12px;">Gemini / Groq API Key:</label>
                        <input type="text" id="ai-api-key" style="width:100%; padding:8px; margin:5px 0 15px; border:1px solid #ccc; border-radius:4px;">
                        
                        <label style="font-size:12px; font-weight:bold; color:var(--primary);">📚 قاعدة معرفة الشركة (اللوائح، السياسات، القوانين):</label>
                        <textarea id="ai-knowledge-base" rows="6" placeholder="الصق هنا اللوائح الداخلية للشركة، قوانين الإجازات، أو أي سياسات ليتمكن الذكاء الاصطناعي من الإجابة بناءً عليها..." style="width:100%; padding:8px; margin:5px 0 15px; border:1px solid #ccc; border-radius:4px; font-family: 'Cairo', sans-serif; resize:vertical;"></textarea>

                        <div style="display:flex; justify-content:space-between;">
                            <button onclick="window.aiModule.toggleSettings()" style="padding:5px 10px; background:#ddd; border:none; border-radius:4px; cursor:pointer;">إلغاء</button>
                            <button onclick="window.aiModule.saveSettings()" style="padding:5px 10px; background:#2ecc71; color:white; border:none; border-radius:4px; cursor:pointer;">حفظ وتلقين الذكاء الاصطناعي</button>
                        </div>
                    </div>
                </div>

                <div id="ai-chat-body">
                    <div class="ai-msg bot">مرحباً أستاذ محمود! أنا مساعدك الذكي الخاص بـ Easy ERP. يمكنني الإجابة على أسئلة حول مبيعاتك، المخزون، أو تنبيهك لأي شيء غير مألوف. كيف يمكنني مساعدتك اليوم؟</div>
                </div>
                <div id="ai-chat-input-area" style="display: flex; gap: 5px; padding: 10px; background: white; border-top: 1px solid #ddd;">
                    <button id="ai-mic-btn" onclick="window.aiModule.startVoiceRecognition()" style="background:#f39c12; border:none; color:white; border-radius:5px; cursor:pointer; min-width:35px; height:35px; display:flex; align-items:center; justify-content:center; font-size:16px;">🎤</button>
                    <input type="text" id="ai-chat-input" placeholder="اكتب سؤالك هنا..." onkeypress="if(event.key === 'Enter') window.aiModule.sendMessage()" style="flex:1; border: 1px solid #ccc; padding: 0 10px; border-radius: 5px;">
                    <button onclick="window.aiModule.sendMessage()" style="min-width:35px; height:35px; background: #3498db; color:white; border:none; border-radius:5px; cursor:pointer;">➤</button>
                </div>
            </div>
            
            <button id="ai-floating-btn" onclick="window.aiModule.toggleChat()">🤖</button>
        </div>
    `;

    // Append to body after DOM is loaded
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => {
            document.body.insertAdjacentHTML('beforeend', aiHTML);
            document.getElementById('ai-widget-container').style.display = 'none';
            window.aiModule.init();
        });
    } else {
        document.body.insertAdjacentHTML('beforeend', aiHTML);
        document.getElementById('ai-widget-container').style.display = 'none';
        window.aiModule.init();
    }

    // Only show AI widget for admin users
    setInterval(() => {
        const widget = document.getElementById('ai-widget-container');
        if (widget) {
            const savedUserStr = sessionStorage.getItem('currentUser');
            let isAdmin = false;
            if (savedUserStr) {
                try {
                    const u = JSON.parse(savedUserStr);
                    if (u && u.role === 'مدير عام') isAdmin = true;
                } catch(e) {}
            }
            if (isAdmin) {
                widget.style.display = 'block';
            } else {
                widget.style.display = 'none';
            }
        }
    }, 1000);
})();
