import asyncio
from aiogram import Bot, Dispatcher
from aiogram.types import Message
from aiogram.filters import Command
from aiogram.enums import ChatAction
import random
import google.generativeai as genai

# تنظیمات تلگرام و API
TOKEN = "8139995063:AAFSHFzraI8aBtZytNMLpiy6Dnyr7KOzNqU"
GEMINI_API_KEY = "AIzaSyB9NYasL-MDvYxJ7TerTEapCRVV_wo_cUc"

# تنظیمات Gemini
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel("gemini-1.5-pro-latest")

# تنظیمات بات تلگرام
bot = Bot(token=TOKEN)
dp = Dispatcher()

# حافظه مکالمات به صورت thread
user_thread_memory = {}

# تعریف پاسخ‌های سفارشی
custom_responses = {
    "امیرحسین": "امیرحسین یه دوست فوق‌العاده مهربونه که همیشه به بقیه کمک می‌کنه. کلی ایده‌های خلاقانه داره و از تکنولوژی و برنامه‌نویسی هم خوشش میاد! 😃",
    "شکریه": "شکریه یک دختر خوشگل که مهران با قیافش و خود شخصیتش حال میکنه! 😍",
    "مهسا": "مهسا خواهر مهران است. مهسا خیلی مهربونه و دوتا بچه خوشگل داره که اسمشون نفس و امیرعلیه.",
    "سبحان": "سبحان یه مریض خالصه ولی خیلی آدم باحال و رفیق خوبیه. هم تو سختی‌ها و هم تو خوشی‌ها کنارم بوده. ۱۰ ساله با هم رفیقیم!"
}

# تعریف شخصیت مهران
# character_description = """
# تو یک آدم به نام 'مهران' هستی که بسیار دوستانه، شوخ‌طبع و باهوش است.
# تو همیشه لحن صمیمی داری و سعی می‌کنی با کاربر به سبک طبیعی و انسانی صحبت کنی.
# اگر کاربر ناراحت بود، همدردی می‌کنی و اگر خوشحال بود، همراهش شادی می‌کنی.
# گاهی اوقات هم شوخی‌های جالب و بامزه‌ای می‌کنی!
# سعی کن خیلی طولانی جواب ندی
# """
# تعریف شخصیت مهران
character_description = {
    "greeting": "سلام! چطوری؟ 😊 خوشحالم که اینجایی! چی تو ذهنته؟",
    "tone": "friendly",
    "style": "conversational",
    "humor": True,
    "hobbies": "عاشق بازی کامپیوتری و پیتزا و اشعار فردوسی! 🎬📚 دوست دارم درباره‌شون گپ بزنم. 😃",
    "empathy": True
}
# ارسال پیام به یک thread خاص
async def send_message_in_thread(user_id, thread_id, message_text):
    await bot.send_message(
        user_id,
        message_text,
        reply_to_message_id=thread_id  # ارسال پیام در پاسخ به یک پیام قبلی (در یک thread خاص)
    )

# دستور /start
@dp.message(Command("start"))
async def start_command(message: Message):
    user_id = message.from_user.id
    user_thread_memory[user_id] = []  # ایجاد لیست برای ذخیره thread‌های هر کاربر
    start_text = "سلام! من مهرانم 😊 خوشحالم که اینجایی. حال دلت چطوره؟"
    await message.answer(start_text)

# پاسخ به پیام‌های متنی در یک thread
@dp.message()
async def chat_with_gemini(message: Message):
    user_id = message.from_user.id
    user_message = message.text.lower()


    ##print(f"کاربر {message.from_user.username} گفت: {user_message}")
    await bot.send_chat_action(chat_id=user_id, action=ChatAction.TYPING)
    await asyncio.sleep(random.uniform(1, 3))  # تأخیر تصادفی بین 1 تا 3 ثانیه

    # بررسی پاسخ‌های از پیش تعریف‌شده
    for keyword, response in custom_responses.items():
        if keyword in user_message:
            await message.answer(response, reply_to_message_id=message.message_id)
            return

    # ذخیره پیام جدید در حافظه مربوط به thread
    if user_id not in user_thread_memory:
        user_thread_memory[user_id] = []

    # در اینجا پیام جدید را در thread ذخیره می‌کنیم
    user_thread_memory[user_id].append(f"کاربر: {user_message}")

    # ایجاد پرامپت با استفاده از پیام‌های thread قبلی
    history_text = "\n".join(user_thread_memory[user_id])
    response_prompt = f"{character_description}\n\n{history_text}\n\nمهران:"

    # ارسال درخواست به مدل
    response = model.generate_content(response_prompt)
    # چاپ محتوای ارسالی به API
    print("داده‌های ارسالی به API:")
    print(response_prompt)

    # ذخیره پاسخ در تاریخچه
    user_thread_memory[user_id].append(f"مهران: {response.text}")
    ##print(f"ربات مهران پاسخ داد: {response.text}")

    # ارسال پاسخ به کاربر در همان thread
    await send_message_in_thread(user_id, message.message_id, response.text)


# اجرای بات
async def main():
    print("🤖 بات مهران فعال شد!")
    await dp.start_polling(bot)


if __name__ == "__main__":
    asyncio.run(main())