import logging
import requests
import time
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup, ParseMode
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, ConversationHandler, MessageHandler, Filters, CallbackContext

# ============ НАСТРОЙКИ AI АССИСТЕНТА ============
AI_ASSISTANT_ID = "749791cd-cfce-4b68-a5f5-1695fa387b54"
API_TOKEN = "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6IjFrYnhacFJNQGJSI0tSbE1xS1lqIn0.eyJ1c2VyIjoiYTIwMjAiLCJ0eXBlIjoiYXBpX2tleSIsImFwaV9rZXlfaWQiOiJhYWJjMjA3Zi0xZmZjLTRhOTgtOTYwNC1kY2RjMjZlNTljMTkiLCJpYXQiOjE3NjkxMjUzNzZ9.CtrcAqUXOq6z2lfKvX2pfa_rpj8oHT_h8gPG_l1JNxD1ELz3dCL96LQY3C8BQ23dGW6sIvNOXHf1jQqqWtii8h2xG-oZL_pkOlW0LNKtf9iTB-PJupMgfE9YX_kQdU61R-F55KLhyvXdyhCRijD552KWZPZVLWKG4wKirGRKC7Rx04sUaDavDr09uNejSq0KdF6uwqEkAOBEPFJyVdsOw3axirrtq0aWkmzgntYh-E0RzVqNP9-ueueiXEq_N_qUpkH68FDZvfNvZKwEVJ5J_GvB8p6wSWKQVyiDBKbF4m2YBKkEpQHXWv8W8r8xxS7vsmJOtRnHy56jYQsaGwhVk6iO3_CcCyez-TnseG2DTKMO0W-92xAQWWU1iW702a2wkyJ1dQ4KrkW4Qsu2m0aia-lllS8JDz23yw5zmtM58a-uY7AdwUGSkWXccu8xT6xV6tDqNahAdTRFFK4Fno49uz1Oo4gc7qUwJyQmvsqwqOPWTQ0NqoPp8PaJbdMTXq_o"
BASE_URL = "https://agent.timeweb.cloud"

HEADERS = {
    "Authorization": f"Bearer {API_TOKEN}",
    "Content-Type": "application/json",
    "x-proxy-source": "telegram-bot"
}

# Логирование
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO,
    handlers=[
        logging.FileHandler('bot.log'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

# Токен бота
TOKEN = "8525528845:AAGp8Hw5Dhn4QRSl3KLbqhfcVmSrAXLtK-k"

# Состояние (для обратной совместимости)
AI_CONSULTATION = 1

# ============ ФУНКЦИЯ AI С ПАМЯТЬЮ ИСТОРИИ ============
def call_ai_assistant(message_text, context):
    """Вызов AI ассистента с сохранением истории диалога"""
    try:
        # Получаем или создаем историю диалога
        if 'chat_history' not in context.user_data:
            context.user_data['chat_history'] = []
        
        chat_history = context.user_data['chat_history']
        
        # Формируем промпт с историей диалога
        system_prompt = """ """
        
        # Формируем полный контекст с историей
        full_context = system_prompt + "\n\n"
        
        # Добавляем историю диалога (последние 3 пары вопрос-ответ)
        if chat_history:
            full_context += "История нашего диалога:\n"
            for i, msg in enumerate(chat_history[-6:]):  # Берем последние 6 сообщений
                role = "Пользователь" if msg["role"] == "user" else "Ассистент"
                full_context += f"{role}: {msg['content']}\n"
            full_context += "\n"
        
        # Добавляем текущий вопрос
        full_context += f"Текущий вопрос пользователя: {message_text}\n\n"
        full_context += "Ответь, учитывая всю историю диалога выше:"
        
        url = f"{BASE_URL}/api/v1/cloud-ai/agents/{AI_ASSISTANT_ID}/call"
        
        payload = {
            "message": full_context
        }
        
        logger.info(f"Отправляю запрос к AI ассистенту с историей")
        logger.info(f"Длина запроса: {len(full_context)} символов")
        logger.info(f"История диалога: {len(chat_history)} сообщений")
        
        start_time = time.time()
        
        response = requests.post(
            url, 
            headers=HEADERS, 
            json=payload, 
            timeout=180
        )
        
        elapsed_time = time.time() - start_time
        logger.info(f"AI ответ получен за {elapsed_time:.1f} секунд")
        
        if response.status_code == 200:
            result = response.json()
            if "message" in result:
                ai_response = result["message"]
                logger.info(f"Успешный ответ от AI, длина: {len(ai_response)} символов")
                
                # Сохраняем текущий вопрос и ответ в историю
                chat_history.append({"role": "user", "content": message_text})
                chat_history.append({"role": "assistant", "content": ai_response})
                
                # Ограничиваем историю (максимум 20 сообщений)
                if len(chat_history) > 20:
                    chat_history = chat_history[-20:]
                    context.user_data['chat_history'] = chat_history
                
                return ai_response
            else:
                logger.error(f"Неожиданная структура ответа: {result}")
                return "⚠️ Получен ответ с неожиданной структурой. Попробуйте переформулировать вопрос."
            
        else:
            logger.error(f"AI API ошибка {response.status_code}: {response.text[:500]}")
            
            if response.status_code == 400:
                return "❌ Ошибка запроса. Проверьте формат запроса к AI агенту."
            elif response.status_code == 401:
                return "🔐 Ошибка авторизации API. Проверьте токен."
            elif response.status_code == 404:
                return "🔍 AI ассистент не найден. Проверьте ID ассистента."
            elif response.status_code == 504:
                return "⏱️ Сервер AI долго обрабатывает запрос. База знаний очень большая. Попробуйте задать вопрос короче или подождите."
            elif response.status_code == 429:
                return "⚠️ Слишком много запросов. Пожалуйста, подождите минуту перед следующим вопросом."
            elif response.status_code == 502:
                return "🔧 Проблемы с сервером AI. Пожалуйста, попробуйте позже."
            else:
                return f"❌ Ошибка сервера (код {response.status_code}). Попробуйте позже."
            
    except requests.exceptions.Timeout:
        logger.error("Таймаут при запросе к AI (больше 180 секунд)")
        return "⏱️ AI долго обрабатывает запрос с базой знаний. Попробуйте:\n1. Задать вопрос короче\n2. Подождать 1-2 минуты\n3. Если проблема повторяется, сообщите администратору"
        
    except requests.exceptions.ConnectionError:
        logger.error("Ошибка соединения с AI сервером")
        return "🔌 Проблема с соединением к AI серверу. Проверьте интернет."
        
    except Exception as e:
        logger.error(f"Критическая ошибка в AI: {str(e)}", exc_info=True)
        return "⚠️ Технические проблемы с AI. Администратор уведомлен."

# ============ ОБРАБОТЧИК ВСЕХ ТЕКСТОВЫХ СООБЩЕНИЙ ============
def handle_any_message(update: Update, context: CallbackContext):
    """Обработка ЛЮБЫХ текстовых сообщений в любое время"""
    # Игнорируем команды
    if update.message.text.startswith('/'):
        return
    
    user_message = update.message.text
    
    # Специальные команды для управления историей
    if user_message.lower() in ["очистить историю", "забудь всё", "новый разговор", "/clear"]:
        if 'chat_history' in context.user_data:
            context.user_data['chat_history'] = []
        update.message.reply_text("✅ История диалога очищена! Начинаем новый разговор.")
        return
    
    if user_message.lower() in ["показать историю", "что помнишь", "история", "/history"]:
        if 'chat_history' in context.user_data and context.user_data['chat_history']:
            history = context.user_data['chat_history']
            history_text = "📜 <b>История нашего диалога:</b>\n\n"
            for i, msg in enumerate(history[-10:]):  # Показываем последние 10 сообщений
                role = "👤 <b>Вы:</b>" if msg["role"] == "user" else "🤖 <b>Бот:</b>"
                # Обрезаем длинные сообщения для удобства чтения
                content = msg['content']
                if len(content) > 100:
                    content = content[:100] + "..."
                history_text += f"{role} {content}\n\n"
            update.message.reply_text(history_text, parse_mode=ParseMode.HTML)
        else:
            update.message.reply_text("История диалога пуста. Задайте первый вопрос!")
        return
    
    # Проверка длины
    if len(user_message) > 2000:
        update.message.reply_text("❌ Вопрос слишком длинный. Сократите до 2000 символов.")
        return
    
    # Показываем "печатает"
    context.bot.send_chat_action(chat_id=update.effective_chat.id, action="typing")
    
    # Отправляем сообщение о том, что бот думает
    thinking_msg = update.message.reply_text(
        "⏳ <b>AI обрабатывает запрос...</b>\n\n"
        "<i>База знаний большая, это займет 30-60 секунд. Пожалуйста, подождите...</i>",
        parse_mode=ParseMode.HTML
    )
    
    try:
        # Получаем ответ от AI
        ai_response = call_ai_assistant(user_message, context)
        
        # Удаляем сообщение о процессе
        try:
            context.bot.delete_message(
                chat_id=update.effective_chat.id,
                message_id=thinking_msg.message_id
            )
        except:
            pass
        
        # Отправляем ответ
        response_text = f"⚖️ <b>Ответ AI-автоюриста:</b>\n\n{ai_response}\n\n"
        
        keyboard = [
            [InlineKeyboardButton("🔄 Новый вопрос", callback_data='new_question')],
            [InlineKeyboardButton("👨‍💼 Консультация юриста", callback_data='online_lawyer')],
            [InlineKeyboardButton("📞 Связь", callback_data='contact_lawyer')],
            [InlineKeyboardButton("🧹 Очистить историю", callback_data='clear_history')],
            [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
        ]
        reply_markup = InlineKeyboardMarkup(keyboard)
        
        # Если ответ длинный, разбиваем
        if len(response_text) > 4000:
            chunks = [response_text[i:i+4000] for i in range(0, len(response_text), 4000)]
            for i, chunk in enumerate(chunks):
                if i == 0:
                    update.message.reply_text(
                        chunk,
                        parse_mode=ParseMode.HTML,
                        reply_markup=reply_markup if i == len(chunks)-1 else None
                    )
                else:
                    update.message.reply_text(chunk, parse_mode=ParseMode.HTML)
        else:
            update.message.reply_text(
                response_text,
                parse_mode=ParseMode.HTML,
                reply_markup=reply_markup
            )
        
    except Exception as e:
        logger.error(f"Ошибка в handle_any_message: {str(e)}")
        update.message.reply_text(
            "❌ Произошла ошибка при обработке запроса. Пожалуйста, попробуйте еще раз."
        )

# ============ ОСНОВНЫЕ ФУНКЦИИ ============
def start(update: Update, context: CallbackContext):
    """Команда /start"""
    # Инициализируем историю диалога
    context.user_data['chat_history'] = []
    
    keyboard = [
        [InlineKeyboardButton("⚖️ Консультация AI Автоюриста", callback_data='ai_consult')],
        [InlineKeyboardButton("👨‍💼 Консультация онлайн-юриста", callback_data='online_lawyer')],
        [InlineKeyboardButton("📞 Связь с юристом", callback_data='contact_lawyer')],
        [InlineKeyboardButton("ℹ️ О боте", callback_data='about_bot')],
        [InlineKeyboardButton("🧹 Очистить историю", callback_data='clear_history')]
    ]
    
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    welcome_text = """
⚖️ <b>БОТ-АВТОЮРИСТ</b>

Просто напишите ваш вопрос по автомобильному праву!

<b>Особенности:</b>
• Отвечает на вопросы в любое время
• <b>ПОМНИТ ИСТОРИЮ ДИАЛОГА</b> (используйте команды ниже)
• Консультирует по штрафам, ДТП, ОСАГО

<b>Команды для работы с историей:</b>
• "очистить историю" - начать новый диалог
• "показать историю" - посмотреть историю разговора

<b>Примеры вопросов:</b>
• "Меня зовут Дмитрий" (запомню ваше имя)
• "Как меня зовут?" (вспомню из истории)
• "Что делать при ДТП?"

<b>Внимание:</b> База знаний большая, ответ может занять 30-60 секунд.
"""
    
    update.message.reply_text(
        welcome_text,
        parse_mode=ParseMode.HTML,
        reply_markup=reply_markup
    )

def start_ai_consultation(update: Update, context: CallbackContext):
    """Начало консультации через кнопку (для обратной совместимости)"""
    query = update.callback_query
    query.answer()
    
    # Инициализируем историю, если ее нет
    if 'chat_history' not in context.user_data:
        context.user_data['chat_history'] = []
    
    keyboard = [
        [InlineKeyboardButton("❌ Завершить", callback_data='end_consultation')],
        [InlineKeyboardButton("🧹 Очистить историю", callback_data='clear_history')],
        [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    query.edit_message_text(
        text="🤖 <b>AI-АВТОЮРИСТ</b>\n\n"
             "Задайте ваш вопрос. Я запомню всю историю нашего разговора!\n\n"
             "⚠️ <i>База знаний большая, ответ займет 30-60 секунд. Пожалуйста, подождите...</i>",
        parse_mode=ParseMode.HTML,
        reply_markup=reply_markup
    )
    
    return AI_CONSULTATION

def handle_ai_message(update: Update, context: CallbackContext):
    """Обработка вопросов в режиме консультации (для обратной совместимости)"""
    user_message = update.message.text
    
    # Специальные команды для управления историей
    if user_message.lower() in ["очистить историю", "забудь всё", "новый разговор", "/clear"]:
        if 'chat_history' in context.user_data:
            context.user_data['chat_history'] = []
        update.message.reply_text("✅ История диалога очищена! Начинаем новый разговор.")
        return AI_CONSULTATION
    
    if user_message.lower() in ["показать историю", "что помнишь", "история", "/history"]:
        if 'chat_history' in context.user_data and context.user_data['chat_history']:
            history = context.user_data['chat_history']
            history_text = "📜 <b>История диалога:</b>\n\n"
            for i, msg in enumerate(history[-10:]):
                role = "👤 <b>Вы:</b>" if msg["role"] == "user" else "🤖 <b>Бот:</b>"
                content = msg['content']
                if len(content) > 100:
                    content = content[:100] + "..."
                history_text += f"{role} {content}\n\n"
            update.message.reply_text(history_text, parse_mode=ParseMode.HTML)
        else:
            update.message.reply_text("История диалога пуста.")
        return AI_CONSULTATION
    
    if len(user_message) > 2000:
        update.message.reply_text("❌ Вопрос слишком длинный. Сократите до 2000 символов.")
        return AI_CONSULTATION
    
    context.bot.send_chat_action(chat_id=update.effective_chat.id, action="typing")
    
    thinking_msg = update.message.reply_text(
        "⏳ <b>AI обрабатывает запрос...</b>\n\n"
        "<i>База знаний большая, это займет 30-60 секунд. Пожалуйста, подождите...</i>",
        parse_mode=ParseMode.HTML
    )
    
    try:
        ai_response = call_ai_assistant(user_message, context)
        
        try:
            context.bot.delete_message(
                chat_id=update.effective_chat.id,
                message_id=thinking_msg.message_id
            )
        except:
            pass
        
        response_text = f"⚖️ <b>Ответ:</b>\n\n{ai_response}"
        
        keyboard = [
            [InlineKeyboardButton("🔄 Новый вопрос", callback_data='new_question')],
            [InlineKeyboardButton("❌ Завершить", callback_data='end_consultation')],
            [InlineKeyboardButton("🧹 Очистить историю", callback_data='clear_history')],
            [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
        ]
        reply_markup = InlineKeyboardMarkup(keyboard)
        
        if len(response_text) > 4000:
            chunks = [response_text[i:i+4000] for i in range(0, len(response_text), 4000)]
            for i, chunk in enumerate(chunks):
                if i == 0:
                    update.message.reply_text(
                        chunk,
                        parse_mode=ParseMode.HTML,
                        reply_markup=reply_markup if i == len(chunks)-1 else None
                    )
                else:
                    update.message.reply_text(chunk, parse_mode=ParseMode.HTML)
        else:
            update.message.reply_text(
                response_text,
                parse_mode=ParseMode.HTML,
                reply_markup=reply_markup
            )
        
    except Exception as e:
        logger.error(f"Ошибка в handle_ai_message: {str(e)}")
        update.message.reply_text(
            "❌ Произошла ошибка при обработке запроса. Пожалуйста, попробуйте еще раз."
        )
    
    return AI_CONSULTATION

def new_question(update: Update, context: CallbackContext):
    """Новый вопрос"""
    query = update.callback_query
    query.answer()
    
    query.edit_message_text(
        text="🤖 <b>Задайте следующий вопрос:</b>\n\n"
             "Я помню предыдущие сообщения. Задавайте вопрос с учетом истории диалога.\n\n"
             "⚠️ <i>База знаний большая, ответ займет 30-60 секунд. Пожалуйста, подождите...</i>",
        parse_mode=ParseMode.HTML
    )
    
    return AI_CONSULTATION

def clear_history(update: Update, context: CallbackContext):
    """Очистка истории диалога через кнопку"""
    query = update.callback_query
    query.answer()
    
    # Очищаем историю
    if 'chat_history' in context.user_data:
        context.user_data['chat_history'] = []
    
    keyboard = [
        [InlineKeyboardButton("⚖️ Начать консультацию", callback_data='ai_consult')],
        [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    query.edit_message_text(
        text="✅ <b>История диалога очищена!</b>\n\n"
             "Теперь я не буду помнить предыдущие сообщения. Начнем новый разговор!",
        parse_mode=ParseMode.HTML,
        reply_markup=reply_markup
    )

def end_consultation(update: Update, context: CallbackContext):
    """Завершение консультации"""
    query = update.callback_query
    query.answer()
    
    # Не очищаем историю при завершении, чтобы можно было продолжить позже
    keyboard = [
        [InlineKeyboardButton("⚖️ Новая консультация", callback_data='ai_consult')],
        [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    query.edit_message_text(
        text="✅ <b>Консультация завершена</b>\n\n"
             "История диалога сохранена. Можете продолжить в любое время!",
        parse_mode=ParseMode.HTML,
        reply_markup=reply_markup
    )
    
    return ConversationHandler.END

def main_menu(update: Update, context: CallbackContext):
    """Главное меню"""
    query = update.callback_query
    query.answer()
    
    # Не очищаем контекст, чтобы сохранить историю диалога
    keyboard = [
        [InlineKeyboardButton("⚖️ Консультация AI Автоюриста", callback_data='ai_consult')],
        [InlineKeyboardButton("👨‍💼 Консультация онлайн-юриста", callback_data='online_lawyer')],
        [InlineKeyboardButton("📞 Связь с юристом", callback_data='contact_lawyer')],
        [InlineKeyboardButton("ℹ️ О боте", callback_data='about_bot')],
        [InlineKeyboardButton("🧹 Очистить историю", callback_data='clear_history')]
    ]
    
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    welcome_text = """
⚖️ <b>Главное меню</b>

Выберите нужный раздел или просто напишите ваш вопрос!

<b>История диалога сохранена</b> - я помню все предыдущие сообщения.
Используйте кнопку "🧹 Очистить историю", чтобы начать новый разговор.
"""
    
    query.edit_message_text(
        welcome_text,
        parse_mode=ParseMode.HTML,
        reply_markup=reply_markup
    )
    
    return ConversationHandler.END

# ============ КОНТАКТЫ И КОНСУЛЬТАЦИИ ============
def contact_lawyer(update: Update, context: CallbackContext):
    """Связь с юристом"""
    query = update.callback_query
    query.answer()
    
    text = """
📞 <b>СВЯЗЬ С ЮРИСТОМ</b>

Работаем 24/7 без выходных

<b>Телефон:</b> +7 (921) 077-43-97
<b>WhatsApp/Telegram:</b> +7 (921) 077-43-97
<b>Email:</b> lawyer@auto-help.ru

<b>Первая консультация:</b> бесплатно

<i>Звоните в любое время!</i>
"""
    
    query.edit_message_text(
        text=text,
        parse_mode=ParseMode.HTML
    )
    
    keyboard = [
        [InlineKeyboardButton("📱 Позвонить", url='tel:+79210774397')],
        [InlineKeyboardButton("✏️ Написать в WhatsApp", url='https://wa.me/79210774397')],
        [InlineKeyboardButton("✉️ Написать в Telegram", url='https://t.me/+79210774397')],
        [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    context.bot.send_message(
        chat_id=update.effective_chat.id,
        text="Выберите способ связи:",
        reply_markup=reply_markup
    )

def online_lawyer(update: Update, context: CallbackContext):
    """Консультация онлайн-юриста"""
    query = update.callback_query
    query.answer()
    
    text = """
👨‍💼 <b>КОНСУЛЬТАЦИЯ ОНЛАЙН-ЮРИСТА</b>

Если вам нужна живая консультация юриста, вы можете написать в макс +7 (921) 077-43-97

Так же в Telegram и WhatsApp.

Работаем 24/7 без выходных!

<b>Что мы поможем:</b>
• Разбор вашей ситуации с юристом
• Подготовка документов
• Представление интересов в суде
• Помощь со страховыми выплатами
• Оспаривание штрафов ГИБДД

<i>Пишите или звоните в любое время!</i>
"""
    
    query.edit_message_text(
        text=text,
        parse_mode=ParseMode.HTML
    )
    
    keyboard = [
        [InlineKeyboardButton("📱 Позвонить", url='tel:+79210774397')],
        [InlineKeyboardButton("✏️ Написать в WhatsApp", url='https://wa.me/79210774397')],
        [InlineKeyboardButton("✉️ Написать в Telegram", url='https://t.me/+79210774397')],
        [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    context.bot.send_message(
        chat_id=update.effective_chat.id,
        text="Выберите способ связи:",
        reply_markup=reply_markup
    )

def about_bot(update: Update, context: CallbackContext):
    """О боте"""
    query = update.callback_query
    query.answer()
    
    text = """
ℹ️ <b>О БОТЕ</b>

🤖 <b>Бот-автоюрист</b> — ваш помощник в автомобильных вопросах.

<b>Что делает бот:</b>
• Отвечает на вопросы по авто-праву
• Помогает со штрафами ГИБДД
• Консультирует по ДТП и страховым выплатам
• Объясняет про лишение прав

<b>Особенности:</b>
• Большая база знаний (ответ может занять 30-60 секунд)
• Искусственный интеллект GPT-4
• Актуальное законодательство РФ
• Отвечает на вопросы в любое время
• <b>ПОМНИТ ИСТОРИЮ ДИАЛОГА!</b> (до 20 последних сообщений)

<b>Команды для работы с историей:</b>
• "очистить историю" - начать новый диалог
• "показать историю" - посмотреть историю разговора

<b>Важно:</b>
Бот даёт информационные ответы.
Для сложных случаев рекомендуем консультацию живого юриста.
"""
    
    keyboard = [
        [InlineKeyboardButton("⚖️ Начать консультацию", callback_data='ai_consult')],
        [InlineKeyboardButton("👨‍💼 Консультация онлайн-юриста", callback_data='online_lawyer')],
        [InlineKeyboardButton("📞 Связь с юристом", callback_data='contact_lawyer')],
        [InlineKeyboardButton("🏠 Главное меню", callback_data='main_menu')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    
    query.edit_message_text(
        text=text,
        parse_mode=ParseMode.HTML,
        reply_markup=reply_markup
    )

def cancel(update: Update, context: CallbackContext):
    """Отмена"""
    update.message.reply_text("Диалог завершён.")
    return ConversationHandler.END

# ============ ЗАПУСК БОТА ============
def main():
    """Главная функция"""
    updater = Updater(TOKEN, use_context=True)
    dispatcher = updater.dispatcher
    
    # ConversationHandler для обратной совместимости (старый режим через кнопки)
    conv_handler = ConversationHandler(
        entry_points=[CallbackQueryHandler(start_ai_consultation, pattern='^ai_consult$')],
        states={
            AI_CONSULTATION: [
                MessageHandler(Filters.text & ~Filters.command, handle_ai_message),
                CallbackQueryHandler(new_question, pattern='^new_question$'),
                CallbackQueryHandler(end_consultation, pattern='^end_consultation$'),
                CallbackQueryHandler(clear_history, pattern='^clear_history$'),
                CallbackQueryHandler(main_menu, pattern='^main_menu$')
            ]
        },
        fallbacks=[
            CallbackQueryHandler(end_consultation, pattern='^end_consultation$'),
            CommandHandler('cancel', cancel),
            CommandHandler('start', start)
        ],
        allow_reentry=True
    )
    
    # Обработчики
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(conv_handler)
    dispatcher.add_handler(CallbackQueryHandler(contact_lawyer, pattern='^contact_lawyer$'))
    dispatcher.add_handler(CallbackQueryHandler(online_lawyer, pattern='^online_lawyer$'))
    dispatcher.add_handler(CallbackQueryHandler(about_bot, pattern='^about_bot$'))
    dispatcher.add_handler(CallbackQueryHandler(main_menu, pattern='^main_menu$'))
    dispatcher.add_handler(CallbackQueryHandler(clear_history, pattern='^clear_history$'))
    
    # ГЛАВНЫЙ ОБРАБОТЧИК - реагирует на ЛЮБЫЕ текстовые сообщения в любое время
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_any_message))
    
    # Запуск
    logger.info("🤖 Бот запущен с базой знаний AI ассистента")
    logger.info(f"AI Assistant ID: {AI_ASSISTANT_ID}")
    logger.info("Режим: отвечает на любые текстовые сообщения в любое время")
    logger.info("Функция: ПАМЯТЬ ИСТОРИИ ДИАЛОГА включена")
    
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()