from aiogram import Router, Bot
from aiogram.types import InlineQuery, InlineQueryResultArticle, InlineQueryResultCachedPhoto, InputTextMessageContent, InlineKeyboardMarkup, InlineKeyboardButton, InputRichMessageContent, InputRichMessage
from utils import texts
from database import db
from config import WEBAPP_URL
import hashlib
import re

router = Router()

CATEGORY_ICONS = {
    "برنامه‌نویسی": "https://cdn-icons-png.flaticon.com/512/2010/2010295.png",
    "طراحی": "https://cdn-icons-png.flaticon.com/512/1055/1055685.png",
    "محتوا": "https://cdn-icons-png.flaticon.com/512/2593/2593549.png",
    "نویسندگی": "https://cdn-icons-png.flaticon.com/512/2593/2593549.png",
    "ترجمه": "https://cdn-icons-png.flaticon.com/512/2793/2793765.png",
    "تایپ": "https://cdn-icons-png.flaticon.com/512/2793/2793765.png",
    "مارکتینگ": "https://cdn-icons-png.flaticon.com/512/1998/1998087.png",
    "سئو": "https://cdn-icons-png.flaticon.com/512/1998/1998087.png",
    "ادمین": "https://cdn-icons-png.flaticon.com/512/3536/3536445.png",
    "ویدیو": "https://cdn-icons-png.flaticon.com/512/4430/4430397.png",
    "تدوین": "https://cdn-icons-png.flaticon.com/512/4430/4430397.png",
    "صدا": "https://cdn-icons-png.flaticon.com/512/3005/3005238.png",
    "موسیقی": "https://cdn-icons-png.flaticon.com/512/3005/3005238.png",
    "معماری": "https://cdn-icons-png.flaticon.com/512/1055/1055646.png",
    "نقشه‌کشی": "https://cdn-icons-png.flaticon.com/512/1055/1055646.png",
    "داده": "https://cdn-icons-png.flaticon.com/512/2103/2103633.png",
    "مهندسی": "https://cdn-icons-png.flaticon.com/512/2103/2103633.png",
    "ربات": "https://cdn-icons-png.flaticon.com/512/4712/4712109.png",
    "مشاوره": "https://cdn-icons-png.flaticon.com/512/1997/1997970.png",
    "آموزش": "https://cdn-icons-png.flaticon.com/512/2436/2436874.png",
    "تدریس": "https://cdn-icons-png.flaticon.com/512/2436/2436874.png",
    "پشتیبانی": "https://cdn-icons-png.flaticon.com/512/1028/1028027.png"
}

def get_category_icon(category: str) -> str:
    category = category or ""
    for key, url in CATEGORY_ICONS.items():
        if key in category:
            return url
    return "https://cdn-icons-png.flaticon.com/512/1067/1067566.png"

@router.inline_query()
async def inline_search_projects(query: InlineQuery, bot: Bot):
    offset = int(query.offset) if query.offset.isdigit() else 0
    limit = 10
    
    # Get bot info to build deep links for proposals
    bot_info = await bot.get_me()
    
    # Simple search across open projects (searches title, description, and category)
    search_term = query.query.strip().lower()
    projects = await db.get_open_projects(limit=limit, offset=offset, query=search_term if search_term else None)
    
    results = []
    
    # Check if the query is for promoting the bot
    promo_keywords = {"tabligh", "tablighat", "promo", "share", "xlancer", "معرفی", "ربات", "تبلیغ", "معرفی ربات", "اشتراک", "همکاری"}
    is_promo_query = (not search_term) or any(kw in search_term for kw in promo_keywords)
    
    if is_promo_query and offset == 0:
        promo_id = hashlib.md5(f"bot_promo_{query.from_user.id}".encode()).hexdigest()
        
        # Get the cached welcome banner file_id from the database
        banner_file_id = await db.get_setting("welcome_banner_file_id", "")
        
        # 1. Clean & premium caption layout for the photo (using basic HTML compatible with photo captions)
        promo_caption = (
            f"🚀 <b>پلتفرم هوشمند ایکس‌لنسر</b>\n"
            f"<i>مدرن‌ترین بازار فریلنسری و استخدام در تلگرام</i>\n\n"
            f"💡 <b>چرا ایکس‌لنسر؟</b>\n"
            f"🔒 <b>سیستم پرداخت امن (صندوق امانات):</b> تضمین کامل امنیت مالی طرفین پروژه و جلوگیری از کلاهبرداری.\n"
            f"👥 <b>سیستم زیرمجموعه‌گیری:</b> کسب درآمد و دریافت کانکت (بید) رایگان با دعوت دوستان.\n"
            f"💎 <b>اشتراک ویژه (VIP):</b> کارمزد فوق‌العاده پایین (۵٪)، پیشنهاد نامحدود و نشان طلایی در پروفایل.\n"
            f"💬 <b>گفتگوی مستقیم و امن:</b> چت اختصاصی با نظارت هوشمند برای جلوگیری از کلاهبرداری.\n"
            f"👔 <b>همکاری منعطف:</b> پروژه‌های مقطعی یا استخدام نیروی تمام‌وقت.\n\n"
            f"🎯 <i>با ایکس‌لنسر، پروژه خود را سریع ثبت کنید یا به عنوان متخصص درآمد کسب کنید!</i>"
        )
        
        # 2. Premium, structured HTML layout for the fallback (using rich HTML like headings, dividers, blockquotes)
        promo_html = (
            f"<h1>🚀 پلتفرم هوشمند ایکس‌لنسر</h1>"
            f"<i>پیشرفته‌ترین بازار فریلنسری و استخدام نیرو در تلگرام</i>"
            f"<hr/>"
            f"<blockquote><b>ایکس‌لنسر</b> بستری هوشمند، سریع و مطمئن برای ارتباط کارفرمایان و فریلنسرها است. با خیال راحت پروژه ثبت کنید یا از مهارت‌های خود کسب درآمد کنید.</blockquote>"
            f"<br/>"
            f"⚡️ <b>امکانات کلیدی و منحصر به فرد:</b>"
            f"<br/><br/>"
            f"🔒 <b>سیستم پرداخت امن (صندوق امانات):</b> پول فریلنسر تا زمان تحویل و تایید نهایی پروژه در صندوق امن باقی می‌ماند تا امنیت مالی هر دو طرف تضمین شود.<br/>"
            f"👥 <b>زیرمجموعه‌گیری پیشرفته:</b> با دعوت دوستان خود کانکت (بید) هدیه بگیرید و درآمد کسب کنید.<br/>"
            f"💎 <b>اشتراک ویژه VIP:</b> کارمزد بسیار پایین (۵٪)، ارسال نامحدود پیشنهاد و اولویت نمایش در پیشنهادها.<br/>"
            f"💬 <b>چت امن اختصاصی:</b> گفتگو مستقیم با نظارت هوش مصنوعی جهت جلوگیری از انتقال شماره و کلاهبرداری خارج از ربات.<br/>"
            f"📊 <b>انواع همکاری:</b> ثبت پروژه‌های مقطعی فریلنسری یا استخدام دائم تمام‌وقت.<br/>"
            f"<hr/>"
            f"🎯 <b>همین حالا وارد ربات شوید و کسب‌وکار خود را رونق دهید!</b>"
        )
        
        # Inline action button for direct bot access with referral tracking
        promo_btn = InlineKeyboardButton(
            text="🚀 ورود و شروع کار در ایکس‌لنسر",
            url=f"https://t.me/{bot_info.username}?start=ref_{query.from_user.id}"
        )
        promo_markup = InlineKeyboardMarkup(inline_keyboard=[[promo_btn]])
        
        if banner_file_id:
            # If we have the cached banner file_id, send it as a cached photo result
            results.append(
                InlineQueryResultCachedPhoto(
                    id=promo_id,
                    photo_file_id=banner_file_id,
                    title="🚀 معرفی و اشتراک‌گذاری ربات ایکس‌لنسر",
                    description="اشتراک‌گذاری ربات به همراه بنر معرفی، لیست امکانات و دکمه شیشه‌ای ورود",
                    caption=promo_caption,
                    parse_mode="HTML",
                    reply_markup=promo_markup
                )
            )
        else:
            # Fallback to article if banner file_id is not available yet
            content_rich = InputRichMessageContent(
                rich_message=InputRichMessage(html=promo_html)
            )
            results.append(
                InlineQueryResultArticle(
                    id=promo_id,
                    title="🚀 معرفی و اشتراک‌گذاری ربات ایکس‌لنسر",
                    description="اشتراک‌گذاری ربات به همراه لیست امکانات و دکمه شیشه‌ای ورود",
                    input_message_content=content_rich,
                    thumbnail_url="https://cdn-icons-png.flaticon.com/512/4712/4712109.png", # Robot icon
                    thumbnail_width=48,
                    thumbnail_height=48,
                    reply_markup=promo_markup
                )
            )
        
    for p in projects:
        # Convert row to dict
        p_dict = dict(p)
            
        result_id = hashlib.md5(f"proj_{p_dict['project_id']}".encode()).hexdigest()
        
        status = texts.PROJECT_STATUS_MAP.get(p_dict['status'], p_dict['status'])
        deadline = f"{p_dict['deadline_days']} روز" if p_dict['deadline_days'] else "بدون محدودیت"
        category_name = p_dict.get('category', '') or 'نامشخص'
        type_str = "تمام‌وقت/استخدامی" if p_dict.get('project_type') == 'full_time' else "پروژه‌ای مقطعی"
        file_icon = "📎 دارد" if p_dict.get('file_id') else "ندارد"
        
        title_prefix = "⭐ <b>پروژه ویژه</b><br/>" if p_dict.get('is_featured') else ""
        
        html_content = (
            f"{title_prefix}"
            f"<h1>📌 {p_dict['title']}</h1>"
            "<hr/>"
            f"<blockquote>📋 {p_dict['description']}</blockquote>"
            "<br/>"
            "<table bordered>"
            f"  <tr><th>🏷 دسته‌بندی</th><td>{category_name}</td></tr>"
            f"  <tr><th>💼 نوع همکاری</th><td>{type_str}</td></tr>"
            f"  <tr><th>💰 بودجه</th><td>{p_dict['budget_min']:,} تا {p_dict['budget_max']:,} تومان</td></tr>"
            f"  <tr><th>📅 مهلت تحویل</th><td>{deadline}</td></tr>"
            f"  <tr><th>📊 وضعیت پروژه</th><td>{status}</td></tr>"
            f"  <tr><th>📎 فایل ضمیمه</th><td>{file_icon}</td></tr>"
            "</table>"
        )
        
        content_rich = InputRichMessageContent(
            rich_message=InputRichMessage(html=html_content)
        )
        
        # Dynamic category thumbnail icon
        thumb_url = get_category_icon(category_name)
        
        # Clean HTML tags from description preview to prevent visual break in inline lists
        clean_desc = re.sub(r'<[^>]*>', '', p_dict.get('description', ''))
        desc_preview = clean_desc[:50].replace('\n', ' ').strip()
        
        # Premium description showing Category, Budget, and Deadline
        budget_str = f"{p_dict['budget_min']:,} تا {p_dict['budget_max']:,} تومان"
        deadline_str = f"{p_dict['deadline_days']} روز" if p_dict['deadline_days'] else "بدون مهلت"
        description = f"🏷 {category_name} | 💵 {budget_str} | 📅 {deadline_str} | {desc_preview}..."
        
        # Visual badges in Title (VIP / Work Type)
        featured_badge = "⭐ " if p_dict.get('is_featured') else ""
        type_badge = "👔 " if p_dict.get('project_type') == 'full_time' else "💼 "
        title_with_badges = f"{featured_badge}{type_badge}{p_dict['title']}"
        
        # Inline action button for direct project access
        btn = InlineKeyboardButton(
            text="💡 مشاهده و ثبت پیشنهاد",
            url=f"https://t.me/{bot_info.username}?start=project_{p_dict['project_id']}"
        )
        markup = InlineKeyboardMarkup(inline_keyboard=[[btn]])
        
        results.append(
            InlineQueryResultArticle(
                id=result_id,
                title=title_with_badges,
                description=description,
                input_message_content=content_rich,
                thumbnail_url=thumb_url,
                thumbnail_width=48,
                thumbnail_height=48,
                reply_markup=markup
            )
        )
        
    next_offset = str(offset + limit) if len(projects) == limit else ""
    await query.answer(results, next_offset=next_offset, cache_time=10)
