"""Inline mode — use Bobi inline in any chat."""
from __future__ import annotations

import logging

from telegram import (
    InlineQueryResultArticle,
    InlineQueryResultPhoto,
    InputTextMessageContent,
    Update,
)
from telegram.constants import ParseMode
from telegram.ext import ContextTypes, InlineQueryHandler

from bot import db
from bot.helpers import user_link

logger = logging.getLogger(__name__)


async def inline_query(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Handle inline queries — search notes, custom commands, stickers."""
    query = update.inline_query
    if not query or not query.query:
        return

    results = []
    search = query.query.strip()

    # Search custom commands
    commands = await db.search_custom_commands(None, search, limit=5)
    for cmd in commands:
        results.append(
            InlineQueryResultArticle(
                id=f"cmd_{cmd['trigger']}",
                title=f"📝 {cmd['trigger']}",
                description=cmd['response'][:100],
                input_message_content=InputTextMessageContent(
                    cmd['response'],
                    parse_mode=ParseMode.HTML,
                ),
            )
        )

    # Search learned responses
    learned = await db.search_learned_responses(None, search, limit=5)
    for lr in learned:
        results.append(
            InlineQueryResultArticle(
                id=f"learn_{lr['trigger']}",
                title=f"🎓 {lr['trigger']}",
                description=lr['response'][:100] if lr['response'] else "(media)",
                input_message_content=InputTextMessageContent(
                    lr['response'] or f"🎓 {lr['trigger']}",
                    parse_mode=ParseMode.HTML,
                ),
            )
        )

    # Search notes
    notes = await db.search_notes(None, search, limit=5)
    for note in notes:
        results.append(
            InlineQueryResultArticle(
                id=f"note_{note['name']}",
                title=f"📋 {note['name']}",
                description=note.get('content', '')[:100],
                input_message_content=InputTextMessageContent(
                    note.get('content', f"📋 {note['name']}"),
                    parse_mode=ParseMode.HTML,
                ),
            )
        )

    if results:
        await query.answer(results, cache_time=300, is_personal=True)
    else:
        await query.answer([], cache_time=30, is_personal=True,
                          switch_pm_text="نتیجه‌ای یافت نشد",
                          switch_pm_parameter="help")


def register(app) -> None:
    app.add_handler(InlineQueryHandler(inline_query))
    logger.info("Inline query handler registered")
