/**
 * shop-ai.js — مشاور هوشمند فروشگاه عرقیات
 */
;(function (global) {
    'use strict';

    const API = () => (global.ACC_CHAT_CFG?.api_base || '/acc-engine/api.php/acc/v1').replace(/\/$/, '');
    const SESS_KEY = 'acc_shop_ai_session';

    function esc(s) {
        return String(s ?? '').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
    }

    function sessionId() {
        let id = localStorage.getItem(SESS_KEY);
        if (!id) {
            id = 'ai_' + Math.random().toString(36).slice(2) + Date.now().toString(36);
            localStorage.setItem(SESS_KEY, id);
        }
        return id;
    }

    const state = {
        history: [],
        loading: false,
        mounted: false,
    };

    function renderMarkdownLite(text) {
        return esc(text)
            .replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
            .replace(/\n/g, '<br>');
    }

    async function sendMessage(text, root) {
        if (!text.trim() || state.loading) return;
        state.loading = true;
        state.history.push({ role: 'user', content: text.trim() });
        _paintMessages(root);

        const typing = root.querySelector('#shop-ai-typing');
        if (typing) typing.hidden = false;

        try {
            const r = await fetch(API() + '/public/arag/ai/chat', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    message: text.trim(),
                    history: state.history.slice(-10),
                    session_id: sessionId(),
                    mizaj_type: localStorage.getItem('acc_mizaj_type') || '',
                }),
            });
            const j = await r.json().catch(() => ({}));
            if (!r.ok || !j.success) {
                throw new Error(j.message || 'خطا در پاسخ AI');
            }
            const reply = j.data?.reply || '';
            state.history.push({ role: 'assistant', content: reply });
            _paintMessages(root, j.data?.suggestions || []);
        } catch (e) {
            state.history.push({ role: 'assistant', content: 'متأسفم، خطایی رخ داد. لطفاً دوباره تلاش کنید یا با پشتیبانی تماس بگیرید.' });
            _paintMessages(root);
        } finally {
            state.loading = false;
            if (typing) typing.hidden = true;
        }
    }

    function _paintMessages(root, suggestions = []) {
        const box = root.querySelector('#shop-ai-msgs');
        if (!box) return;
        box.innerHTML = state.history.map(h => `
            <div class="shop-ai-msg shop-ai-msg--${h.role === 'user' ? 'user' : 'bot'}">
                <div class="shop-ai-msg__bubble">${renderMarkdownLite(h.content)}</div>
            </div>`).join('');

        const sug = root.querySelector('#shop-ai-suggestions');
        if (sug) {
            if (suggestions.length) {
                sug.hidden = false;
                sug.innerHTML = suggestions.map(p => `
                    <a class="shop-ai-sug" href="${esc(p.url)}" target="_blank" rel="noopener">
                        🌿 ${esc(p.name)} — ${(+p.price).toLocaleString('fa-IR')} تومان
                    </a>`).join('');
            } else {
                sug.hidden = true;
                sug.innerHTML = '';
            }
        }
        box.scrollTop = box.scrollHeight;
    }

    function mount(container) {
        if (!container) return;
        container.innerHTML = `
            <div class="shop-ai">
                <div class="shop-ai__head">
                    <span>🤖 مشاور عرقیات</span>
                    <small id="shop-ai-engine"></small>
                </div>
                <div class="shop-ai__msgs" id="shop-ai-msgs"></div>
                <div class="shop-ai__typing" id="shop-ai-typing" hidden>در حال فکر کردن…</div>
                <div class="shop-ai__suggestions" id="shop-ai-suggestions" hidden></div>
                <div class="shop-ai__chips" id="shop-ai-chips">
                    <button type="button" data-q="گلاب برای شربت چی پیشنهاد می‌کنید؟">گلاب</button>
                    <button type="button" data-q="کد تخفیف دارید؟">تخفیف</button>
                    <button type="button" data-q="ارسال چطور است؟">ارسال</button>
                    <button type="button" data-q="ارزان‌ترین محصولات">اقتصادی</button>
                </div>
                <div class="shop-ai__input-row">
                    <textarea id="shop-ai-input" rows="1" placeholder="سوال خود را بپرسید…"></textarea>
                    <button type="button" id="shop-ai-send" title="ارسال">➤</button>
                </div>
            </div>`;

        if (!state.mounted) {
            fetch(API() + '/public/arag/ai/status')
                .then(r => r.json())
                .then(j => {
                    const el = container.querySelector('#shop-ai-engine');
                    if (!el || !j.data) return;
                    const mode = j.data.has_llm ? `AI: ${j.data.model}` : 'راهنمای هوشمند';
                    el.textContent = mode;
                })
                .catch(() => {});
            if (!state.history.length) {
                state.history.push({
                    role: 'assistant',
                    content: 'سلام! 🌿 من مشاور فروش عرقیات هستم.\nدر انتخاب محصول، قیمت، تخفیف و ارسال کمکتان می‌کنم.',
                });
            }
            state.mounted = true;
        }

        _paintMessages(container);

        const input = container.querySelector('#shop-ai-input');
        const send  = () => sendMessage(input?.value || '', container).then(() => { if (input) input.value = ''; });

        container.querySelector('#shop-ai-send')?.addEventListener('click', send);
        input?.addEventListener('keydown', e => {
            if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); send(); }
        });
        container.querySelectorAll('#shop-ai-chips [data-q]').forEach(btn => {
            btn.addEventListener('click', () => sendMessage(btn.dataset.q, container));
        });
    }

    global.ShopAI = { mount, sessionId };
})(typeof window !== 'undefined' ? window : globalThis);
