"""
ربات آموزشی زبان انگلیسی پایه هشتم - کتاب Prospect 2
ویژه پیام‌رسان بله
"""

import requests
import json
import time
import threading
from datetime import datetime
import re

# ============================================
# تنظیمات اولیه ربات
# ============================================
TOKEN = "1674825507:-y3OhNZ-e_jTHT65Ty_hd5gD453_FFClCRs"  # توکن خود را از @BotFather در بله بگیرید
BASE_URL = f"https://tapi.bale.ai/bot{TOKEN}/"

# ============================================
# شناسه معلم واقعی - اینجا رو حتما تنظیم کن!
# ============================================
TEACHER_CHAT_ID = "707895197"  # ⚠️ این رو با chat_id معلم واقعی جایگزین کن

# دیکشنری برای ذخیره وضعیت هر دانش‌آموز
user_sessions = {}

# دیکشنری برای ذخیره نمرات دانش‌آموزان
student_scores = {}

# ============================================
# دیتابیس کامل دروس (بر اساس کتاب Prospect 2 - پایه هشتم)
# ============================================

lessons = {
    1: {
        "name": "My Nationality",
        "title": "ملیت من",
        "content": """
📚 **درس 1: ملیت من (My Nationality)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **اهداف درس:**
• صحبت کردن درباره ملیت و کشور
• پرسیدن و پاسخ دادن به "اهل کجایی؟"
• معرفی خود و دیگران

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🌍 **کشورها و ملیت‌ها (Countries & Nationalities):**

| کشور (Country) | ملیت (Nationality) | فارسی |
|----------------|-------------------|-------|
| Iran | Iranian | ایرانی |
| France | French | فرانسوی |
| England | British/English | انگلیسی |
| China | Chinese | چینی |
| Spain | Spanish | اسپانیایی |
| Brazil | Brazilian | برزیلی |
| Italy | Italian | ایتالیایی |
| Germany | German | آلمانی |
| Japan | Japanese | ژاپنی |
| Turkey | Turkish | ترکی |
| Canada | Canadian | کانادایی |
| Australia | Australian | استرالیایی |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💬 **مکالمات مهم (Key Conversations):**

1️⃣ **پرسیدن اهل کجا بودن:**
┌─────────────────────────────────┐
│ A: Where are you from?          │
│ B: I'm from Iran.               │
│ A: Are you Iranian?             │
│ B: Yes, I am.                   │
└─────────────────────────────────┘

2️⃣ **معرفی دیگران:**
┌─────────────────────────────────┐
│ A: This is my cousin Sam.       │
│ B: Nice to meet you, Sam.       │
│    Where are you from?          │
│ C: I'm from France.             │
└─────────────────────────────────┘

3️⃣ **پرسیدن درباره دیگران:**
┌─────────────────────────────────┐
│ A: Is she from England?         │
│ B: Yes, she is.                 │
│ A: Is he Chinese?               │
│ B: No, he isn't. He's Japanese. │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 **نکات گرامری (Grammar Points):**

✅ **فعل to be (حال ساده):**

| ضمیر (Pronoun) | فعل (Verb) | مثال (Example) |
|----------------|------------|----------------|
| I | am | I am Iranian. |
| You | are | You are French. |
| He/She/It | is | She is Chinese. |
| We | are | We are from Spain. |
| They | are | They are Brazilian. |

✅ **سوالی کردن با Are/Is:**
• Are you from Iran? → Yes, I am. / No, I'm not.
• Is she from France? → Yes, she is. / No, she isn't.

✅ **کلمه سوالی Where:**
• Where + are/is + فاعل + from?
• Where are you from? → I'm from Tehran.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✏️ **تمرین (Practice):**

جمله‌های زیر را کامل کنید:

1. Where ___ you from? (are/is/am)
2. She ___ from France. (am/is/are)
3. ___ you Iranian? (Is/Am/Are)
4. They ___ from Brazil. (am/is/are)

💡 **پاسخ:** 1.are | 2.is | 3.Are | 4.are

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""",
        "quiz": [
            {"question": "«آیا تو ایرانی هستی؟» به انگلیسی چی میشه؟", "answer": "are you iranian"},
            {"question": "ملیت کشور France چیست؟", "answer": "french"},
            {"question": "«I'm from England» یعنی اهل کدام کشور است؟", "answer": "england"},
            {"question": "کلمه «ملیت» به انگلیسی چیست؟", "answer": "nationality"},
            {"question": "«Where are you from?» یعنی چه؟", "answer": "اهل کجایی"},
            {"question": "«او چینی است» به انگلیسی چی میشه؟", "answer": "he is chinese"},
            {"question": "ملیت کشور Japan چیست؟", "answer": "japanese"},
        ]
    },
    
    2: {
        "name": "My Week",
        "title": "هفته من",
        "content": """
📚 **درس 2: هفته من (My Week)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **اهداف درس:**
• صحبت درباره فعالیت‌های روزانه
• پرسیدن زمان انجام کارها
• صحبت درباره روزهای هفته

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📅 **روزهای هفته (Days of the Week):**

| روز به فارسی | روز به انگلیسی | مخفف |
|--------------|----------------|------|
| شنبه | Saturday | Sat |
| یکشنبه | Sunday | Sun |
| دوشنبه | Monday | Mon |
| سه‌شنبه | Tuesday | Tue |
| چهارشنبه | Wednesday | Wed |
| پنجشنبه | Thursday | Thu |
| جمعه | Friday | Fri |

🔹 **نکته مهم:** در تقویم انگلیسی، **Saturday** اولین روز هفته است!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **فعالیت‌های روزانه (Daily Activities):**

| انگلیسی | فارسی |
|---------|-------|
| go to school | به مدرسه رفتن |
| study lessons | درس خواندن |
| play sports | ورزش کردن |
| watch TV | تلویزیون دیدن |
| visit relatives | بستگان را دیدن |
| go shopping | خرید رفتن |
| relax | استراحت کردن |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💬 **مکالمات مهم (Key Conversations):**

1️⃣ **پرسیدن کار روزانه:**
┌─────────────────────────────────┐
│ A: What do you do in the        │
│    mornings?                    │
│ B: I go to school.              │
└─────────────────────────────────┘

2️⃣ **پرسیدن زمان:**
┌─────────────────────────────────┐
│ A: When do you play football?   │
│ B: On Saturdays and Tuesdays.   │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 **نکات گرامری (Grammar Points):**

✅ **حرف اضافه ON برای روزهای هفته:**
• ON + روز هفته = در آن روز
• I play tennis on Sundays.

✅ **حرف اضافه IN برای بخش‌های روز:**
• IN + the + morning/afternoon/evening
• I go to school in the morning.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✏️ **تمرین (Practice):**

1. I go to school ___ (in/on/at) the morning.
2. She plays tennis ___ (in/on/at) Saturdays.
3. What ___ you do in the evenings? (does/do/is)

💡 **پاسخ:** 1.in | 2.on | 3.do

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""",
        "quiz": [
            {"question": "اولین روز هفته در تقویم انگلیسی چیست؟", "answer": "saturday"},
            {"question": "«به مدرسه رفتن» به انگلیسی چی میشه؟", "answer": "go to school"},
            {"question": "«I watch TV in the evenings» یعنی چه؟", "answer": "من عصرها تلویزیون میبینم"},
            {"question": "روزهای کاری هفته به انگلیسی چه نامیده می‌شوند؟", "answer": "weekdays"},
            {"question": "«بستگان» به انگلیسی چی میشه؟", "answer": "relatives"},
            {"question": "حرف اضافه درست برای روزهای هفته کدام است؟", "answer": "on"},
            {"question": "«ورزش کردن» به انگلیسی چی میشه؟", "answer": "play sports"},
        ]
    },
    
    3: {
        "name": "My Abilities",
        "title": "توانایی‌های من",
        "content": """
📚 **درس 3: توانایی‌های من (My Abilities)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **اهداف درس:**
• صحبت درباره توانایی‌ها با Can
• صحبت درباره مهارت‌ها با Be good at

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💪 **توانایی‌ها (Abilities):**

| انگلیسی | فارسی |
|---------|-------|
| draw | نقاشی کشیدن |
| swim | شنا کردن |
| cook | آشپزی کردن |
| ride a bicycle | دوچرخه سواری |
| search the Web | جستجوی اینترنتی |
| play football | فوتبال بازی کردن |
| take photos | عکس گرفتن |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 **نکات گرامری (Grammar Points):**

✅ **فعل کمکی Can (توانستن):**

| نوع جمله | ساختار | مثال |
|----------|--------|-------|
| مثبت | فاعل + can + فعل | I can swim. |
| منفی | فاعل + cannot/can't + فعل | I can't swim. |
| سوالی | Can + فاعل + فعل؟ | Can you swim? |

✅ **ساختار Be good at (مهارت داشتن در):**

| نوع جمله | ساختار | مثال |
|----------|--------|-------|
| مثبت | فاعل + am/is/are + good at | I am good at drawing. |
| منفی | فاعل + am/is/are + not + good at | I'm not good at drawing. |

🔹 **نکته مهم:** بعد از can همیشه فعل بدون to می‌آید.
🔹 **نکته مهم:** بعد از good at حتماً فعل -ing می‌آید.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💬 **مکالمات مهم (Key Conversations):**

┌─────────────────────────────────┐
│ A: Can you draw?                │
│ B: No, I'm not good at drawing. │
│    But I can take good photos.  │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✏️ **تمرین (Practice):**

1. ___ you swim? (Can/Are/Is)
2. She ___ good at drawing. (am/is/are)
3. I ___ play tennis. (can/am/are)

💡 **پاسخ:** 1.Can | 2.is | 3.can

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""",
        "quiz": [
            {"question": "«آیا می‌توانی نقاشی بکشی؟» به انگلیسی", "answer": "can you draw"},
            {"question": "«من می‌توانم شنا کنم» به انگلیسی", "answer": "i can swim"},
            {"question": "«Are you good at cooking?» یعنی چه؟", "answer": "آیا در آشپزی خوبی"},
            {"question": "مخفف cannot چیست؟", "answer": "can't"},
            {"question": "«ride a bicycle» یعنی چه؟", "answer": "دوچرخه سواری"},
            {"question": "بعد از good at چه فرمی از فعل می‌آید؟", "answer": "ing"},
            {"question": "«توانایی» به انگلیسی چی میشه؟", "answer": "ability"},
        ]
    },
    
    4: {
        "name": "My Health",
        "title": "سلامتی من",
        "content": """
📚 **درس 4: سلامتی من (My Health)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **اهداف درس:**
• صحبت درباره دردها و بیماری‌ها
• پرسیدن مشکل (What's wrong?)
• دادن توصیه پزشکی

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🤒 **بیماری‌ها و دردها (Health Problems):**

| انگلیسی | فارسی |
|---------|-------|
| headache | سردرد |
| toothache | دندان‌درد |
| stomachache | دل‌درد |
| sore throat | گلو درد |
| running nose | آبریزش بینی |
| fever | تب |
| cough | سرفه |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💬 **مکالمات مهم (Key Conversations):**

1️⃣ **پرسیدن احوال:**
┌─────────────────────────────────┐
│ A: Are you OK?                  │
│ B: No, I'm not. I have a        │
│    headache.                    │
└─────────────────────────────────┘

2️⃣ **پرسیدن مشکل:**
┌─────────────────────────────────┐
│ A: What's wrong?                │
│ B: I have a sore throat.        │
│ A: You should see a doctor.     │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 **نکات گرامری (Grammar Points):**

✅ **گفتن درد با Have/Has:**
• I/You/We/They + have + درد
• He/She/It + has + درد

✅ **توصیه کردن (Giving Advice):**
• You should + فعل
• Why don't you + فعل؟

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✏️ **تمرین (Practice):**

1. I have a ___ (سردرد)
2. You should ___ (استراحت کنی)
3. What's ___? (مشکل)

💡 **پاسخ:** 1.headache | 2.rest | 3.wrong

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""",
        "quiz": [
            {"question": "«سردرد» به انگلیسی چی میشه؟", "answer": "headache"},
            {"question": "«دندان‌درد» به انگلیسی چی میشه؟", "answer": "toothache"},
            {"question": "«You should rest» یعنی چه؟", "answer": "تو باید استراحت کنی"},
            {"question": "«آبریزش بینی» به انگلیسی", "answer": "running nose"},
            {"question": "«What's wrong?» یعنی چه؟", "answer": "مشکل چیه"},
            {"question": "«گلو درد» به انگلیسی", "answer": "sore throat"},
            {"question": "«تب» به انگلیسی", "answer": "fever"},
        ]
    },
    
    5: {
        "name": "My City",
        "title": "شهر من",
        "content": """
📚 **درس 5: شهر من (My City)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **اهداف درس:**
• صحبت درباره مکان‌های شهر
• پرسیدن و پاسخ دادن به "کجاست؟"
• استفاده از There is / There are

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🏙️ **مکان‌های شهر (Places in a City):**

| انگلیسی | فارسی |
|---------|-------|
| museum | موزه |
| mosque | مسجد |
| palace | کاخ |
| bridge | پل |
| restaurant | رستوران |
| airport | فرودگاه |
| train station | ایستگاه قطار |
| park | پارک |
| zoo | باغ وحش |
| library | کتابخانه |
| hospital | بیمارستان |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🧭 **جهات جغرافیایی (Directions):**

| جهت | انگلیسی |
|-----|---------|
| شمال | North |
| جنوب | South |
| شرق | East |
| غرب | West |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💬 **مکالمات مهم (Key Conversations):**

┌─────────────────────────────────┐
│ A: Where is Isfahan?            │
│ B: It's in the center of Iran.  │
│ A: What's Isfahan like?         │
│ B: It's a big and clean city.   │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 **نکات گرامری (Grammar Points):**

✅ **There is / There are (وجود داشتن):**

| نوع جمله | مفرد (There is) | جمع (There are) |
|----------|-----------------|-----------------|
| مثبت | There is a museum. | There are many museums. |
| سوالی | Is there a restaurant? | Are there any hotels? |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✏️ **تمرین (Practice):**

1. Isfahan is ___ the center of Iran. (in/on/at)
2. There ___ many parks in the city. (is/are/am)
3. The stadium is ___ (شمال) of the city.

💡 **پاسخ:** 1.in | 2.are | 3.north

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""",
        "quiz": [
            {"question": "«موزه» به انگلیسی چی میشه؟", "answer": "museum"},
            {"question": "«شمال» به انگلیسی چی میشه؟", "answer": "north"},
            {"question": "«Is there a restaurant?» یعنی چه؟", "answer": "آیا رستورانی وجود دارد"},
            {"question": "«فرودگاه» به انگلیسی", "answer": "airport"},
            {"question": "«قدیمی» به انگلیسی", "answer": "old"},
            {"question": "«پل» به انگلیسی", "answer": "bridge"},
        ]
    },
    
    6: {
        "name": "My Village",
        "title": "روستای من",
        "content": """
📚 **درس 6: روستای من (My Village)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **اهداف درس:**
• صحبت درباره روستا و طبیعت
• توصیف آب و هوا
• صحبت درباره فصل‌ها

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🌄 **طبیعت (Nature):**

| انگلیسی | فارسی |
|---------|-------|
| mountain | کوه |
| river | رودخانه |
| lake | دریاچه |
| field | مزرعه |
| tree | درخت |
| flower | گل |
| forest | جنگل |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🌦️ **آب و هوا (Weather):**

| انگلیسی | فارسی |
|---------|-------|
| sunny | آفتابی |
| cloudy | ابری |
| rainy | بارانی |
| snowy | برفی |
| windy | بادی |
| hot | گرم |
| cold | سرد |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🌸 **فصل‌ها (Seasons):**

| فارسی | انگلیسی |
|-------|---------|
| بهار | Spring |
| تابستان | Summer |
| پاییز | Autumn/Fall |
| زمستان | Winter |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💬 **مکالمات مهم (Key Conversations):**

┌─────────────────────────────────┐
│ A: What's the weather like?     │
│ B: It's sunny and warm.         │
│ A: Is it cold in winter?        │
│ B: Yes, it's very cold.         │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✏️ **تمرین (Practice):**

1. What's the weather ___? (like/as/is)
2. It's ___ (آفتابی) today.
3. Is it cold ___ winter? (in/on/at)

💡 **پاسخ:** 1.like | 2.sunny | 3.in

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""",
        "quiz": [
            {"question": "«آفتابی» به انگلیسی چی میشه؟", "answer": "sunny"},
            {"question": "«کوه» به انگلیسی چی میشه؟", "answer": "mountain"},
            {"question": "«زمستان» به انگلیسی", "answer": "winter"},
            {"question": "«What's the weather like?» یعنی چه؟", "answer": "آب و هوا چطور است"},
            {"question": "«رودخانه» به انگلیسی", "answer": "river"},
            {"question": "«برفی» به انگلیسی", "answer": "snowy"},
            {"question": "«بهار» به انگلیسی", "answer": "spring"},
        ]
    },
    
    7: {
        "name": "My Hobbies",
        "title": "سرگرمی‌های من",
        "content": """
📚 **درس 7: سرگرمی‌های من (My Hobbies)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎯 **اهداف درس:**
• صحبت درباره سرگرمی‌ها
• صحبت درباره فعالیت‌های اوقات فراغت

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎨 **سرگرمی‌ها (Hobbies):**

| انگلیسی | فارسی |
|---------|-------|
| reading | کتاب خواندن |
| drawing | نقاشی کشیدن |
| watching movies | فیلم دیدن |
| listening to music | گوش دادن به موسیقی |
| playing football | فوتبال بازی |
| swimming | شنا کردن |
| cooking | آشپزی کردن |
| photography | عکاسی |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💬 **مکالمات مهم (Key Conversations):**

┌─────────────────────────────────┐
│ A: Do you have any hobbies?     │
│ B: Yes, I watch movies as a     │
│    hobby.                       │
│ A: What do you do in your       │
│    free time?                   │
│ B: I usually go shopping.       │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 **نکات گرامری (Grammar Points):**

✅ **علاقه داشتن (Liking):**
• I like + اسم / (فعل+ing)
• I love + اسم / (فعل+ing)
• I enjoy + (فعل+ing)

✅ **پرسیدن اوقات فراغت:**
• What do you do in your free time?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✏️ **تمرین (Practice):**

1. Do you have ___ hobbies? (any/some)
2. I enjoy ___ (خواندن)
3. What do you do ___ your free time? (in/on/at)

💡 **پاسخ:** 1.any | 2.reading | 3.in

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""",
        "quiz": [
            {"question": "«سرگرمی» به انگلیسی چی میشه؟", "answer": "hobby"},
            {"question": "«What do you do in your free time?» یعنی چه؟", "answer": "در وقت آزادت چه می کنی"},
            {"question": "«خواندن» به انگلیسی (با ing)", "answer": "reading"},
            {"question": "«فیلم دیدن» به انگلیسی", "answer": "watching movies"},
            {"question": "«I enjoy cooking» یعنی چه؟", "answer": "من از آشپزی لذت می برم"},
            {"question": "«آیا سرگرمی داری؟» به انگلیسی", "answer": "do you have any hobbies"},
            {"question": "«وقت آزاد» به انگلیسی", "answer": "free time"},
        ]
    }
}

# ============================================
# توابع کمکی
# ============================================

def send_message(chat_id, text, parse_mode="Markdown"):
    """ارسال پیام به کاربر"""
    url = BASE_URL + "sendMessage"
    payload = {
        "chat_id": chat_id,
        "text": text,
        "parse_mode": parse_mode
    }
    try:
        response = requests.post(url, json=payload)
        return response.json()
    except Exception as e:
        print(f"خطا در ارسال پیام: {e}")
        return None

def get_updates(offset=0, timeout=30):
    """دریافت پیام‌های جدید از سرور بله"""
    url = BASE_URL + "getUpdates"
    params = {
        "offset": offset,
        "timeout": timeout
    }
    try:
        response = requests.get(url, params=params)
        return response.json()
    except Exception as e:
        print(f"خطا در دریافت پیام‌ها: {e}")
        return None

def send_report_to_teacher(chat_id, user_name, lesson_num, lesson_title, score, total, percentage, grade):
    """ارسال گزارش نمره دانش‌آموز به معلم"""
    if TEACHER_CHAT_ID and TEACHER_CHAT_ID != "123456789":
        report = f"""
📊 **گزارش آزمون دانش‌آموز به استاد**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

👨‍🎓 **نام دانش‌آموز:** {user_name}
🆔 **شناسه کاربر:** {chat_id}
📚 **درس:** {lesson_num} - {lesson_title}
📝 **نمره:** {score} از {total}
📈 **درصد:** {percentage:.1f}%
⭐ **وضعیت:** {grade}
🕐 **زمان:** {datetime.now().strftime('%Y/%m/%d %H:%M:%S')}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
"""
        send_message(TEACHER_CHAT_ID, report)
        print(f"📤 گزارش به معلم ارسال شد: {user_name} - درس {lesson_num}")

def get_main_menu():
    """منوی اصلی ربات"""
    return """
📚 **ربات آموزشی زبان انگلیسی پایه هشتم**

سلام! من **معلم زبان انگلیسی** شما هستم.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 **دستورات موجود:**
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🔹 `/start` یا `/menu` - نمایش این منو
🔹 `/lessons` - نمایش لیست دروس
🔹 `/lesson 1` تا `/lesson 7` - شروع درس
🔹 `/quiz 1` تا `/quiz 7` - آزمون درس
🔹 `/report` - گزارش پیشرفت شما
🔹 `/help` - راهنمای کامل

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💡 **نکته:** بعد از خوندن هر درس، حتماً آزمونش رو بده!

موفق باشی! 🎓
"""

def show_lessons_list():
    """نمایش لیست دروس"""
    return """
📚 **لیست دروس کتاب Prospect 2 (پایه هشتم)**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

| شماره | نام درس | موضوع |
|-------|---------|-------|
| 1 | My Nationality | ملیت و کشورها |
| 2 | My Week | روزهای هفته و فعالیت‌ها |
| 3 | My Abilities | توانایی‌ها با Can |
| 4 | My Health | بیماری‌ها و توصیه‌ها |
| 5 | My City | شهر و مکان‌ها |
| 6 | My Village | روستا و آب و هوا |
| 7 | My Hobbies | سرگرمی‌ها |

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

برای شروع درس: `/lesson 1`
برای آزمون درس: `/quiz 1`
"""

def show_help():
    """نمایش راهنمای کامل"""
    return """
📚 **راهنمای کامل ربات آموزشی**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📖 **دستورات:**

`/start` - منوی اصلی
`/lessons` - لیست دروس
`/lesson [1-7]` - شروع درس
`/quiz [1-7]` - شروع آزمون
`/report` - گزارش پیشرفت
`/help` - همین راهنما
`/cancel` - لغو آزمون

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💡 **نکات مهم:**

✅ هر درس شامل واژگان، گرامر و مکالمه
✅ بعد از مطالعه درس، حتماً آزمون بده
✅ نمره شما به معلم اعلام می‌شود

موفق باشی! 🎓
"""

def start_quiz(chat_id, lesson_num):
    """شروع آزمون برای یک درس مشخص"""
    if lesson_num not in lessons:
        send_message(chat_id, "❌ درس مورد نظر پیدا نشد!")
        return False
    
    lesson = lessons[lesson_num]
    quiz_questions = lesson.get("quiz", [])
    
    if not quiz_questions:
        send_message(chat_id, "❌ آزمونی برای این درس تعریف نشده است.")
        return False
    
    user_sessions[chat_id] = {
        "quiz_mode": True,
        "quiz_lesson": lesson_num,
        "quiz_questions": quiz_questions,
        "quiz_index": 0,
        "quiz_score": 0,
        "quiz_total": len(quiz_questions)
    }
    
    first_question = quiz_questions[0]["question"]
    send_message(chat_id, f"""
📝 **آزمون درس {lesson_num}: {lesson['title']}**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

❓ **سوال 1 از {len(quiz_questions)}:**

{first_question}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

⚠️ برای لغو آزمون `/cancel` رو بفرست.
""")
    return True

def check_quiz_answer(chat_id, user_answer, user_name="دانش‌آموز"):
    """بررسی پاسخ کاربر در آزمون"""
    if chat_id not in user_sessions:
        return False
    
    session = user_sessions[chat_id]
    if not session.get("quiz_mode", False):
        return False
    
    current_q = session["quiz_questions"][session["quiz_index"]]
    correct_answer = current_q["answer"].lower().strip()
    user_ans = user_answer.lower().strip()
    
    user_clean = re.sub(r'[^\w\s]', '', user_ans)
    correct_clean = re.sub(r'[^\w\s]', '', correct_answer)
    
    if user_clean == correct_clean or user_clean in correct_answer or correct_answer in user_clean:
        is_correct = True
    else:
        is_correct = False
    
    if is_correct:
        session["quiz_score"] += 1
        send_message(chat_id, "✅ **پاسخ صحیح!** آفرین! 🎉")
    else:
        send_message(chat_id, f"❌ **پاسخ اشتباه!**\n\nپاسخ صحیح: `{correct_answer}`")
    
    session["quiz_index"] += 1
    
    if session["quiz_index"] >= session["quiz_total"]:
        score = session["quiz_score"]
        total = session["quiz_total"]
        percentage = (score / total) * 100
        
        if percentage >= 90:
            grade = "A+ (عالی 🌟)"
        elif percentage >= 80:
            grade = "A (خیلی خوب 📚)"
        elif percentage >= 70:
            grade = "B (خوب 👍)"
        elif percentage >= 60:
            grade = "C (قابل قبول ✅)"
        else:
            grade = "D (نیاز به تمرین بیشتر 📖)"
        
        lesson_num = session["quiz_lesson"]
        if chat_id not in student_scores:
            student_scores[chat_id] = {}
        student_scores[chat_id][lesson_num] = {"score": score, "total": total, "percentage": percentage}
        
        lesson_title = lessons[lesson_num]["title"]
        send_report_to_teacher(chat_id, user_name, lesson_num, lesson_title, score, total, percentage, grade)
        
        result_text = f"""
📊 **نتیجه آزمون درس {lesson_num}**

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

👨‍🎓 **نمره شما:** {score} از {total}
📈 **درصد:** {percentage:.1f}%
⭐ **رتبه:** {grade}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
"""
        send_message(chat_id, result_text)
        del user_sessions[chat_id]
        return True
    
    next_q = session["quiz_questions"][session["quiz_index"]]
    send_message(chat_id, f"""
❓ **سوال {session['quiz_index'] + 1} از {session['quiz_total']}:**

{next_q['question']}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
""")
    return True

def show_progress_report(chat_id, user_name="دانش‌آموز"):
    """نمایش گزارش پیشرفت دانش‌آموز"""
    
    report = f"""
📋 **گزارش پیشرفت تحصیلی**

👤 **نام:** {user_name}
📅 **تاریخ:** {datetime.now().strftime('%Y/%m/%d')}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 **نمرات آزمون‌ها:**
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
"""
    
    if chat_id in student_scores and student_scores[chat_id]:
        for lesson_num in range(1, 8):
            if lesson_num in student_scores[chat_id]:
                score_data = student_scores[chat_id][lesson_num]
                report += f"\nدرس {lesson_num}: {score_data['score']}/{score_data['total']} ({score_data['percentage']:.0f}%)"
            else:
                report += f"\nدرس {lesson_num}: ⏳ شرکت نکرده"
    else:
        report += "\nهیچ آزمونی ثبت نشده است. با /quiz [1-7] آزمون بده!"
    
    report += """

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 **به تلاشت ادامه بده!** 🌟
"""
    send_message(chat_id, report)

def cancel_quiz(chat_id):
    """لغو آزمون جاری"""
    if chat_id in user_sessions and user_sessions[chat_id].get("quiz_mode", False):
        del user_sessions[chat_id]
        send_message(chat_id, "❌ آزمون لغو شد. از `/menu` استفاده کن.")
        return True
    return False

# ============================================
# تابع اصلی پردازش پیام‌ها
# ============================================

def process_message(chat_id, message_text, user_name="دانش‌آموز"):
    """پردازش پیام دریافتی از کاربر"""
    
    message_text = message_text.strip()
    
    # بررسی حالت آزمون
    if chat_id in user_sessions and user_sessions[chat_id].get("quiz_mode", False):
        if message_text.lower() == "/cancel":
            cancel_quiz(chat_id)
            return
        check_quiz_answer(chat_id, message_text, user_name)
        return
    
    # پردازش دستورات
    if message_text.lower() in ["/start", "/menu"]:
        send_message(chat_id, get_main_menu())
        
    elif message_text.lower() == "/lessons":
        send_message(chat_id, show_lessons_list())
        
    elif message_text.lower() == "/help":
        send_message(chat_id, show_help())
        
    elif message_text.lower() == "/report":
        show_progress_report(chat_id, user_name)
        
    elif message_text.lower().startswith("/lesson"):
        parts = message_text.split()
        if len(parts) == 2 and parts[1].isdigit():
            lesson_num = int(parts[1])
            if lesson_num in lessons:
                lesson = lessons[lesson_num]
                send_message(chat_id, f"""
📖 **درس {lesson_num}: {lesson['title']}** 
{lesson['content']}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 بعد از خوندن، با `/quiz {lesson_num}` آزمون بده!
""")
            else:
                send_message(chat_id, "❌ درس پیدا نشد. درس‌های موجود: 1 تا 7")
        else:
            send_message(chat_id, "❌ دستور صحیح: `/lesson 1`")
            
    elif message_text.lower().startswith("/quiz"):
        parts = message_text.split()
        if len(parts) == 2 and parts[1].isdigit():
            lesson_num = int(parts[1])
            start_quiz(chat_id, lesson_num)
        else:
            send_message(chat_id, "❌ دستور صحیح: `/quiz 1`")
            
    elif message_text.lower() == "/cancel":
        if not cancel_quiz(chat_id):
            send_message(chat_id, "🔹 در حال حاضر آزمونی در جریان نیست.")
            
    else:
        send_message(chat_id, """
❓ **دستور نامعتبر!**

دستورات معتبر:
🔹 `/start` - منوی اصلی
🔹 `/lessons` - لیست دروس
🔹 `/lesson 1` تا `/lesson 7` - شروع درس
🔹 `/quiz 1` تا `/quiz 7` - شروع آزمون
🔹 `/report` - گزارش پیشرفت
🔹 `/help` - راهنمای کامل
""")

# ============================================
# حلقه اصلی دریافت پیام‌ها
# ============================================

def run_bot():
    """اجرای ربات و دریافت پیام‌ها"""
    print("=" * 55)
    print("🤖 ربات آموزشی زبان انگلیسی پایه هشتم")
    print("📚 کتاب Prospect 2 - English for Schools")
    print("🎓 ویژه پیام‌رسان بله")
    print("=" * 55)
    
    if TOKEN and TOKEN != "توکن_ربات_خود_را_اینجا_قرار_دهید":
        print(f"✅ توکن ربات تنظیم شده است.")
    else:
        print("⚠️ هشدار: توکن ربات تنظیم نشده است!")
        print("لطفاً توکن معتبر را در متغیر TOKEN قرار دهید.")
        return
    
    if TEACHER_CHAT_ID and TEACHER_CHAT_ID != "123456789":
        print(f"✅ معلم با شناسه {TEACHER_CHAT_ID} تنظیم شده است.")
    else:
        print("⚠️ هشدار: TEACHER_CHAT_ID تنظیم نشده است!")
    
    print("📚 منتظر پیام‌های دانش‌آموزان هستم...")
    print("━" * 55)
    
    # حذف Webhook
    try:
        requests.get(f"{BASE_URL}deleteWebhook")
        print("✅ Webhook حذف شد.")
    except:
        pass
    
    last_update_id = 0
    
    while True:
        try:
            updates = get_updates(offset=last_update_id + 1, timeout=30)
            
            if updates and updates.get("ok"):
                for update in updates.get("result", []):
                    update_id = update.get("update_id")
                    message = update.get("message")
                    
                    if message:
                        chat_id = message.get("chat", {}).get("id")
                        text = message.get("text", "")
                        user_name = message.get("chat", {}).get("first_name", "دانش‌آموز")
                        
                        if text and chat_id:
                            print(f"📩 پیام از {user_name}: {text[:50]}")
                            process_message(chat_id, text, user_name)
                    
                    if update_id:
                        last_update_id = max(last_update_id, update_id)
                            
        except Exception as e:
            print(f"⚠️ خطا: {e}")
            time.sleep(5)

# ============================================
# اجرای ربات
# ============================================

if __name__ == "__main__":
    run_bot()