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

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

    let metaCache = null;
    let catalogCache = null;

    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 = 'wsai_' + Math.random().toString(36).slice(2) + Date.now().toString(36);
            localStorage.setItem(SESS_KEY, id);
        }
        return id;
    }

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

    async function loadContext() {
        if (!metaCache) {
            try {
                const r = await fetch(API() + '/public/wholesale/meta');
                const j = await r.json();
                metaCache = j.data || {};
            } catch { metaCache = {}; }
        }
        if (!catalogCache) {
            try {
                const r = await fetch(API() + '/public/wholesale/catalog');
                const j = await r.json();
                catalogCache = j.data || [];
            } catch { catalogCache = []; }
        }
        return { meta: metaCache, catalog: catalogCache };
    }

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

    function ruleReply(text, ctx) {
        const q = text.toLowerCase();
        const { meta, catalog } = ctx;

        if (/ثبت.?نام|عضویت|اکانت|حساب/.test(q)) {
            return 'برای ثبت‌نام خریدار B2B:\n1. از تب **خدمت** گزینه «ثبت‌نام خریدار» را انتخاب کنید\n2. یا در پورتال روی «درخواست دسترسی» کلیک کنید\n3. پس از تأیید مدیر، نام کاربری و رمز برای شما ارسال می‌شود';
        }
        if (/moq|حداقل.?سفارش|حداقل.?تعداد/.test(q)) {
            const sample = catalog.slice(0, 3).map(p => `• ${p.name}: MOQ ${p.moq || '—'}`).join('\n');
            return `**حداقل سفارش (MOQ)** برای هر SKU متفاوت است.\n${sample || '• کاتالوگ را در پورتال ببینید'}\n\nبرای حجم بالاتر، تخفیف پلکانی tier اعمال می‌شود.`;
        }
        if (/tier|پلکان|تخفیف.?حجم|retailer|distributor|vip/.test(q)) {
            const tiers = meta.tiers || {};
            const lines = Object.entries(tiers).map(([k, v]) => `• **${k}**: ${v.label} — ${v.discount_note}`).join('\n');
            return `**سطوح قیمت B2B:**\n${lines || '• retailer / distributor / vip'}\n\nسطح شما پس از تأیید حساب تعیین می‌شود.`;
        }
        if (/incoterm|exw|fca|dap|تحویل|حمل/.test(q)) {
            const terms = meta.incoterms || {};
            const lines = Object.entries(terms).map(([k, v]) => `• **${k}**: ${v}`).join('\n');
            return `**شرایط تحویل (Incoterms):**\n${lines}\n\nپیش‌فرض: EXW — تحویل انبار قشم.`;
        }
        if (/net.?30|اعتبار|پرداخت|prepaid|cod/.test(q)) {
            const pay = meta.payment_terms || {};
            const lines = Object.entries(pay).map(([k, v]) => `• **${k}**: ${v}`).join('\n');
            return `**شرایط پرداخت:**\n${lines}\n\nNet 30 برای خریداران تأییدشده با سقف اعتبار فعال است.`;
        }
        if (/po|purchase.?order|سفارش.?خرید/.test(q)) {
            return '**سفارش با PO:**\n• شماره PO را هنگام ثبت سفارش در پورتال وارد کنید\n• برای سازمان‌ها، تأیید مالی Net 30 نیاز به قرارداد دارد\n• از تب خدمت «Incoterms / PO» درخواست دهید';
        }
        if (/پیگیری|ws-|وضعیت.?سفارش/.test(q)) {
            return '**پیگیری سفارش:**\n• شماره سفارش با پیشوند **WS-** است\n• پس از ورود به پورتال، بخش «سفارش‌های من» را ببینید\n• یا از تب خدمت «پیگیری سفارش WS» درخواست دهید';
        }
        if (/قیمت|محصول|کاتالوگ|sku/.test(q)) {
            const hits = catalog.filter(p =>
                q.split(/\s+/).some(w => w.length > 2 && (p.name || '').toLowerCase().includes(w) || (p.sku || '').toLowerCase().includes(w))
            ).slice(0, 5);
            if (hits.length) {
                return hits.map(p =>
                    `🌿 **${p.name}** (${p.sku || '—'})\n   MOQ: ${p.moq || '—'} | دسته: ${p.category || '—'}\n   قیمت: پس از ورود و تأیید حساب`
                ).join('\n\n') + '\n\nبرای قیمت دقیق tier، وارد پورتال شوید.';
            }
            const list = catalog.slice(0, 5).map(p => `• ${p.name} (MOQ ${p.moq || '—'})`).join('\n');
            return `**نمونه محصولات:**\n${list || 'کاتالوگ در حال بارگذاری است.'}\n\nقیمت‌ها پس از تأیید حساب B2B نمایش داده می‌شوند.`;
        }
        if (/قشم|منطقه.?آزاد|zone/.test(q)) {
            const zones = meta.zones || {};
            const lines = Object.entries(zones).map(([k, v]) => `• ${v}`).join('\n');
            return `**مناطق تحویل:**\n${lines}\n\nواردات از منطقه آزاد قشم با مزیت تعرفه‌ای برای توزیع سراسری.`;
        }
        return 'سؤالات رایج: ثبت‌نام B2B، MOQ، قیمت پلکانی، Incoterms، Net 30، PO، پیگیری WS.\nاز دکمه‌های زیر یک موضوع انتخاب کنید یا سؤال خود را بنویسید.';
    }

    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('#ws-ai-typing');
        if (typing) typing.hidden = false;

        try {
            const ctx = await loadContext();
            const reply = ruleReply(text.trim(), ctx);
            await new Promise(r => setTimeout(r, 400 + Math.random() * 300));
            state.history.push({ role: 'assistant', content: reply });
            _paintMessages(root);
        } catch {
            state.history.push({ role: 'assistant', content: 'متأسفم، خطایی رخ داد. لطفاً دوباره تلاش کنید یا با پشتیبانی تماس بگیرید.' });
            _paintMessages(root);
        } finally {
            state.loading = false;
            if (typing) typing.hidden = true;
        }
    }

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

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

        if (!state.mounted) {
            loadContext().then(() => {
                const el = container.querySelector('#ws-ai-engine');
                if (el) el.textContent = 'کاتالوگ + قوانین B2B';
            });
            if (!state.history.length) {
                state.history.push({
                    role: 'assistant',
                    content: 'سلام! 🏝️ من مشاور عمده‌فروشی قشم هستم.\nدر ثبت‌نام خریدار، MOQ، قیمت tier، Incoterms، Net 30 و PO کمکتان می‌کنم.',
                });
            }
            state.mounted = true;
        }

        _paintMessages(container);

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

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

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