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

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

    const ROUTES = [
        { key: 'ai_advisor',    icon: '🤖', title: 'مشاور B2B' },
        { key: 'b2b_apply',     icon: '📝', title: 'ثبت‌نام خریدار' },
        { key: 'moq_pricing',   icon: '📊', title: 'MOQ / قیمت پلکانی' },
        { key: 'incoterms_po',  icon: '📋', title: 'Incoterms / PO' },
        { key: 'order_track',   icon: '📦', title: 'پیگیری سفارش WS' },
        { key: 'expert_connect', icon: '👤', title: 'ارجاع کارشناس' },
    ];

    const FIELDS = {
        _default: [
            { key: 'name', label: 'نام *', type: 'text', required: true },
            { key: 'phone', label: 'موبایل *', type: 'tel', required: true, dir: 'ltr' },
            { key: 'complaint_text', label: 'پیام شما *', type: 'textarea', required: true },
        ],
        b2b_apply: [
            { key: 'business_name', label: 'نام کسب‌وکار *', type: 'text', required: true },
            { key: 'contact_name', label: 'نام مسئول', type: 'text' },
            { key: 'phone', label: 'موبایل *', type: 'tel', required: true, dir: 'ltr' },
            { key: 'email', label: 'ایمیل', type: 'email', dir: 'ltr' },
            { key: 'business_type', label: 'نوع (retailer/distributor)', type: 'text', placeholder: 'retailer' },
            { key: 'zone', label: 'منطقه (qeshm_ftz/mainland)', type: 'text' },
            { key: 'city', label: 'شهر', type: 'text' },
            { key: 'tax_id', label: 'شناسه ملی / اقتصادی', type: 'text', dir: 'ltr' },
            { key: 'address', label: 'آدرس', type: 'textarea' },
            { key: 'notes', label: 'توضیحات', type: 'textarea' },
        ],
        moq_pricing: [
            { key: 'name', label: 'نام *', type: 'text', required: true },
            { key: 'phone', label: 'موبایل *', type: 'tel', required: true, dir: 'ltr' },
            { key: 'product_sku', label: 'کد / نام محصول', type: 'text' },
            { key: 'quantity', label: 'حجم تقریبی سفارش', type: 'text' },
            { key: 'complaint_text', label: 'سؤال شما *', type: 'textarea', required: true },
        ],
        incoterms_po: [
            { key: 'name', label: 'نام *', type: 'text', required: true },
            { key: 'phone', label: 'موبایل *', type: 'tel', required: true, dir: 'ltr' },
            { key: 'po_number', label: 'شماره PO (در صورت وجود)', type: 'text', dir: 'ltr' },
            { key: 'incoterm', label: 'Incoterm مورد نظر (EXW/FCA/DAP)', type: 'text' },
            { key: 'complaint_text', label: 'جزئیات *', type: 'textarea', required: true },
        ],
        order_track: [
            { key: 'name', label: 'نام', type: 'text' },
            { key: 'phone', label: 'موبایل *', type: 'tel', required: true, dir: 'ltr' },
            { key: 'order_id', label: 'شماره سفارش WS-*', type: 'text', dir: 'ltr', required: true },
            { key: 'complaint_text', label: 'توضیح', type: 'textarea' },
        ],
        expert_connect: [
            { key: 'name', label: 'نام *', type: 'text', required: true },
            { key: 'phone', label: 'موبایل *', type: 'tel', required: true, dir: 'ltr' },
            { key: 'business_name', label: 'نام کسب‌وکار', type: 'text' },
            { key: 'complaint_text', label: 'موضوع گفتگو *', type: 'textarea', required: true },
        ],
    };

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

    function fieldHtml(f) {
        const id = `cw-w-${f.key}`;
        const req = f.required ? ' required' : '';
        const dir = f.dir ? ` dir="${f.dir}"` : '';
        const ph = f.placeholder ? ` placeholder="${esc(f.placeholder)}"` : '';
        if (f.type === 'textarea') {
            return `<label class="cw-wiz-lbl">${esc(f.label)}</label><textarea class="cw-visitor-input" id="${id}" data-key="${f.key}" rows="3"${req}></textarea>`;
        }
        return `<label class="cw-wiz-lbl">${esc(f.label)}</label><input class="cw-visitor-input" id="${id}" data-key="${f.key}" type="${f.type || 'text'}"${dir}${ph}${req}>`;
    }

    async function fetchFields(type) { return FIELDS[type] || FIELDS._default; }

    function collectPayload(root, serviceType) {
        const payload = { service_type: serviceType, source_portal: 'wholesale' };
        root.querySelectorAll('[data-key]').forEach(el => {
            payload[el.dataset.key] = el.value?.trim?.() ?? el.value;
        });
        return payload;
    }

    async function handleSubmit(payload, ctx) {
        if (payload.service_type !== 'b2b_apply') return false;

        ctx.setLoading(true);
        try {
            const r = await fetch(API() + '/public/wholesale/apply', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    business_name: payload.business_name,
                    contact_name: payload.contact_name,
                    phone: payload.phone,
                    email: payload.email,
                    business_type: payload.business_type || 'retailer',
                    zone: payload.zone || 'mainland',
                    city: payload.city,
                    tax_id: payload.tax_id,
                    address: payload.address,
                    notes: payload.notes,
                }),
            });
            const j = await r.json().catch(() => ({}));
            if (!r.ok || !j.success) {
                alert(j.message || 'خطا در ثبت درخواست');
                return true;
            }
            alert('✅ درخواست ثبت‌نام B2B ثبت شد.\nپس از بررسی، حساب کاربری برای شما فعال می‌شود.');
            if (typeof ctx.onDone === 'function') ctx.onDone();
            return true;
        } catch {
            alert('خطا در ارتباط با سرور');
            return true;
        } finally {
            ctx.setLoading(false);
        }
    }

    global.SvcWizards = {
        ROUTES, fetchFields, fieldHtml, collectPayload, handleSubmit,
        async renderWizard(container, serviceType, serviceTitle, serviceIcon, onBack, onSubmit) {
            const fields = await fetchFields(serviceType);
            container.innerHTML = `
                <button class="cw-back-btn" id="cw-wiz-back">◀ بازگشت</button>
                <div class="cw-section-title">${serviceIcon || '🏝️'} ${esc(serviceTitle)}</div>
                <div id="cw-wiz-fields">${fields.map(fieldHtml).join('')}</div>
                <button class="cw-start-btn" id="cw-w-submit">✅ ارسال</button>`;
            container.querySelector('#cw-wiz-back')?.addEventListener('click', onBack);
            container.querySelector('#cw-w-submit')?.addEventListener('click', () => onSubmit(collectPayload(container, serviceType)));
        },
    };
})(typeof window !== 'undefined' ? window : globalThis);
