"""
Dynamic context builder for the YOUR COMPANY AI assistant.

Pulls live data from the DB — products, FAQs, domain auctions — and returns
a compact system-message string that is injected into every OpenAI request.
Keeps the block concise so it doesn't eat too many tokens.
"""
from django.conf import settings

from apps.pages.branding import company_name


def build_context_block(tenant) -> str:
    """
    Return a formatted string of live site data for injection into the
    AI system prompt.  Called once per chat message, so queries are kept
    lightweight (select_related, limited fields, reasonable limits).
    """
    lines = []
    site_url = getattr(settings, 'SITE_URL', 'https://example.com')

    # ── Products ──────────────────────────────────────────────────────────────
    try:
        from apps.ecommerce.models import Product
        _product_qs = Product.objects.filter(is_active=True, is_auction=False)
        if tenant:
            _product_qs = _product_qs.filter(tenant=tenant)
        products = (
            _product_qs
            .select_related('category')
            .only('name', 'slug', 'product_type', 'price', 'billing_period',
                  'short_description', 'badge')
            .order_by('product_type', 'sort_order')[:60]
        )
        if products:
            lines.append('=== PRODUCTS / SERVICES (live from DB) ===')
            for p in products:
                price_str = f'£{p.price}'
                if p.billing_period == 'monthly':
                    price_str += '/mo'
                elif p.billing_period == 'annual':
                    price_str += '/yr'
                badge = f' [{p.badge}]' if p.badge else ''
                url = f'{site_url}/products/{p.slug}/'
                desc = f' — {p.short_description}' if p.short_description else ''
                # Include slug so AI can match domain queries like "persepolis.club"
                slug_hint = f' (also known as: {p.slug})' if p.slug and p.slug.lower() != p.name.lower().replace(' ', '-') else ''
                lines.append(f'- {p.name}{badge}{slug_hint} | {price_str} | {p.get_product_type_display()} | {url}{desc}')
    except Exception:
        pass  # Never break chat due to context errors

    # ── Domain / Auction listings ─────────────────────────────────────────────
    try:
        from apps.ecommerce.models import Product
        _auction_qs = Product.objects.filter(is_active=True, is_auction=True, auction_status='available')
        if tenant:
            _auction_qs = _auction_qs.filter(tenant=tenant)
        auctions = (
            _auction_qs
            .only('name', 'slug', 'auction_min_offer', 'short_description')
            .order_by('sort_order')[:20]
        )
        if auctions:
            lines.append('')
            lines.append('=== PREMIUM DOMAINS FOR SALE (auction marketplace) ===')
            for d in auctions:
                offer_str = f'Min offer £{d.auction_min_offer}' if d.auction_min_offer else 'Make an offer'
                url = f'{site_url}/auction/{d.slug}/'
                lines.append(f'- {d.name} (domain: {d.slug}) | {offer_str} | {url}')
    except Exception:
        pass

    # ── Domain products (direct purchase, not auction) ────────────────────────
    try:
        from apps.ecommerce.models import Product
        _dom_qs = Product.objects.filter(is_active=True, is_auction=False, product_type='domain')
        if tenant:
            _dom_qs = _dom_qs.filter(tenant=tenant)
        domain_products = _dom_qs.only('name', 'slug', 'price', 'short_description').order_by('sort_order')[:20]
        if domain_products:
            lines.append('')
            lines.append('=== PREMIUM DOMAINS — DIRECT PURCHASE ===')
            for d in domain_products:
                url = f'{site_url}/products/{d.slug}/'
                desc = f' — {d.short_description}' if d.short_description else ''
                lines.append(f'- {d.name} (domain: {d.slug}) | Buy now £{d.price} | {url}{desc}')
    except Exception:
        pass

    # ── FAQs ──────────────────────────────────────────────────────────────────
    try:
        from apps.faq.models import FAQItem
        _faq_qs = FAQItem.objects.filter(is_active=True)
        if tenant:
            _faq_qs = _faq_qs.filter(category__tenant=tenant)
        faqs = (
            _faq_qs
            .select_related('category')
            .only('question', 'answer', 'category__name')
            .order_by('category__order', 'order')[:50]
        )
        if faqs:
            lines.append('')
            lines.append('=== FREQUENTLY ASKED QUESTIONS ===')
            current_cat = None
            for faq in faqs:
                cat_name = faq.category.name if faq.category else 'General'
                if cat_name != current_cat:
                    lines.append(f'[{cat_name}]')
                    current_cat = cat_name
                # Trim answer to 200 chars to keep context lean
                answer = faq.answer.strip().replace('\n', ' ')
                if len(answer) > 200:
                    answer = answer[:197] + '...'
                lines.append(f'Q: {faq.question}')
                lines.append(f'A: {answer}')
    except Exception:
        pass

    # ── Contact / WhatsApp ────────────────────────────────────────────────────
    try:
        whatsapp_link = getattr(tenant, 'whatsapp_link', None)
        if whatsapp_link:
            lines.append('')
            lines.append('=== CONTACT ===')
            lines.append(f'WhatsApp (speak to team directly): {whatsapp_link}')
            lines.append(f'Contact form: {site_url}/contact/')
    except Exception:
        pass

    # ── Key URLs ──────────────────────────────────────────────────────────────
    lines.append('')
    lines.append('=== KEY SITE URLS ===')
    lines.append(f'Shop / All Products: {site_url}/products/')
    lines.append(f'Domain Marketplace: {site_url}/auction/')
    lines.append(f'Portfolio: {site_url}/portfolio/')
    lines.append(f'Insights / Blog: {site_url}/insights/')
    lines.append(f'FAQ: {site_url}/faq/')
    lines.append(f'Start a Project (free assessment): {site_url}/start-project/')
    lines.append(f'Contact: {site_url}/contact/')

    if not lines:
        return ''

    return (
        f'Below is live data from the {company_name()} website. '
        'Use it to answer product, pricing, domain, and FAQ questions accurately. '
        'Always link to the exact product URL when relevant.\n\n'
        + '\n'.join(lines)
    )
