# -*- coding: utf-8 -*-
import logging
import pyfiglet
import requests
import re
import time
import random
import string
from colorama import init, Fore
from bs4 import BeautifulSoup
from datetime import datetime
import telebot
from telebot import types
from threading import Thread
import json
import os

# إعدادات التسجيل
logging.basicConfig(level=logging.INFO)

# تفعيل colorama
init(autoreset=False)

# توكن البوت
TELEGRAM_BOT_TOKEN = "6636872139:AAGfjgkKTirnN3ZJ6k0ylTDYZBp9tQ2M6-U" 

# تهيئة البوت
bot = telebot.TeleBot(TELEGRAM_BOT_TOKEN, parse_mode="HTML")

# تعريف ألوان
RED = '\x1b[1;31m'
GREEN = '\x1b[1;32m'
YELLOW = '\x1b[1;33m'
BLUE = '\x1b[1;34m'
PURPLE = '\x1b[1;35m'
CYAN = '\x1b[1;36m'
WHITE = '\x1b[1;37m'
RESET = '\x1b[0m'

# ملف تخزين المستخدمين
USERS_FILE = 'registered_users.json'
user_data = {}
registered_users = {}

# تحميل المستخدمين
def load_users():
    global registered_users
    try:
        if os.path.exists(USERS_FILE):
            with open(USERS_FILE, 'r', encoding='utf-8') as f:
                registered_users = json.load(f)
    except Exception as e:
        print(f"Error loading users: {e}")
        registered_users = {}

def save_users():
    try:
        with open(USERS_FILE, 'w', encoding='utf-8') as f:
            json.dump(registered_users, f, ensure_ascii=False, indent=2)
    except Exception as e:
        print(f"Error saving users: {e}")

load_users()

# ===== الدوال المساعدة =====
def get_nonce():
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(10))

def unified_login(number, password):
    """دالة تسجيل دخول موحدة"""
    with requests.Session() as session:
        try:
            base_url = 'https://web.vodafone.com.eg/auth/realms/vf-realm/protocol/openid-connect/auth'
            redirect_uri = 'https://web.vodafone.com.eg/ar/KClogin'
            nonce = get_nonce()
            url_action = f"{base_url}?client_id=website&redirect_uri={redirect_uri}&state=random_state&response_mode=query&response_type=code&scope=openid&nonce={nonce}&kc_locale=ar"

            response_url_action = session.get(url_action)
            soup = BeautifulSoup(response_url_action.content, 'html.parser')
            form_action = soup.find('form').get('action')

            data = {'username': number, 'password': password}
            response_login = session.post(form_action, data=data)

            if "KClogin" in response_login.url:
                code = response_login.url.split('code=')[1]
                data_token = {
                    'code': code,
                    'grant_type': 'authorization_code',
                    'client_id': 'website',
                    'redirect_uri': redirect_uri
                }
                token_response = session.post(
                    'https://web.vodafone.com.eg/auth/realms/vf-realm/protocol/openid-connect/token',
                    data=data_token
                )
                return token_response.json().get('access_token')
            return None
        except Exception as e:
            return None

# ===== نظام التسجيل الدائم =====
def register_user(chat_id, phone, password):
    """تسجيل مستخدم جديد بشكل دائم"""
    registered_users[str(chat_id)] = {
        'phone': phone,
        'password': password,
        'registration_date': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    }
    save_users()
    return True

def is_user_registered(chat_id):
    """التحقق إذا كان المستخدم مسجل"""
    return str(chat_id) in registered_users

def get_user_credentials(chat_id):
    """الحصول على بيانات المستخدم المسجل"""
    user = registered_users.get(str(chat_id))
    if user:
        return user['phone'], user['password']
    return None, None

def delete_user(chat_id):
    """حذف مستخدم (لعملية إعادة التسجيل)"""
    if str(chat_id) in registered_users:
        del registered_users[str(chat_id)]
        save_users()
        return True
    return False

# ===== دوال الخدمات الأساسية =====
def process_vodafone_family_info(username, password, chat_id):
    try:
        token = unified_login(username, password)
        if not token:
            bot.send_message(chat_id, "❌ فشل تسجيل الدخول - تأكد من صحة الرقم وكلمة المرور")
            return

        url2 = 'https://mobile.vodafone.com.eg/services/dxl/cg/customerGroupAPI/customerGroup?type=Family'
        headers2 = {
            'channel': 'MOBILE',
            'useCase': 'Promo',
            'Authorization': f'Bearer {token}',
            'api-version': 'v2',
            'x-agent-operatingsystem': '11',
            'clientId': 'AnaVodafoneAndroid',
            'x-agent-device': 'OPPO CPH2059',
            'x-agent-version': '2024.3.3',
            'x-agent-build': '593',
            'msisdn': username,
            'Content-Type': 'application/json',
            'Accept': 'application/json',
            'Accept-Language': 'ar',
            'Host': 'mobile.vodafone.com.eg',
            'Connection': 'Keep-Alive',
            'Accept-Encoding': 'gzip',
            'User-Agent': 'okhttp/4.11.0',
        }

        r2 = requests.get(url2, headers=headers2, timeout=10)
        if r2.status_code != 200:
            bot.send_message(chat_id, f"❌ خطأ في الخدمة: {r2.status_code}")
            return

        data_resp = r2.json()
        members = []
        if isinstance(data_resp, list) and len(data_resp) > 0:
            parts = data_resp[0].get('parts', {}) if isinstance(data_resp[0], dict) else {}
            members = parts.get('member', []) if isinstance(parts, dict) else []
        else:
            if isinstance(data_resp, dict):
                parts = data_resp.get('parts', {})
                members = parts.get('member', [])
            else:
                members = []

        owner_number = None
        member_numbers = []

        for member in members:
            if not isinstance(member, dict):
                continue
            member_type = member.get('type')
            member_id = None
            try:
                id_field = member.get('id')
                if isinstance(id_field, list) and len(id_field) > 0 and isinstance(id_field[0], dict):
                    member_id = id_field[0].get('value')
                elif isinstance(id_field, dict):
                    member_id = id_field.get('value')
                elif isinstance(id_field, str):
                    member_id = id_field
            except Exception:
                member_id = None

            if member_type == 'Owner':
                owner_number = member_id
            elif member_type == 'Member' and member_id:
                member_numbers.append(member_id)

        result_message = "🎯 نتائج مجموعة العائلة:\n\n"
        if owner_number:
            result_message += f'👑 المالك (Owner): {owner_number}\n\n'

        if member_numbers:
            result_message += '👥 الأعضاء (Members):\n' + '\n'.join([f'• {num}' for num in member_numbers]) + "\n"

        if not owner_number and not member_numbers:
            result_message = "❌ لم يتم العثور على أي بيانات للمجموعة."

        bot.send_message(chat_id, result_message)

    except Exception as e:
        bot.send_message(chat_id, f"❌ حدث خطأ: {str(e)}")

def process_line_info(number, password, chat_id):
    token = unified_login(number, password)
    if not token:
        bot.send_message(chat_id, "❌ فشل تسجيل الدخول - تأكد من صحة الرقم وكلمة المرور")
        return

    url2 = f'https://web.vodafone.com.eg/services/dxl/sam/serviceAccountManagement/v1/serviceAccount?@type=Profile&$.resources[?(@resourceType%3D%3D%27MSISDN%27)].IDs[0].value={number}'
    headers2 = {
        'channel': 'MOBILE',
        'useCase': 'Promo',
        'Authorization': f'Bearer {token}',
        'api-version': 'v2',
        'x-agent-operatingsystem': '11',
        'clientId': 'AnaVodafoneAndroid',
        'x-agent-device': 'OPPO CPH2059',
        'x-agent-version': '2024.3.3',
        'x-agent-build': '593',
        'msisdn': number,
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Accept-Language': 'ar',
        'User-Agent': 'okhttp/4.11.0'
    }

    try:
        r2 = requests.get(url2, headers=headers2).json()
        user_info = r2[0]

        contact = user_info['contact'][0]
        billing_account = user_info['billingAccount']
        subscriptions = user_info.get('subscriptions', [])
        categories = user_info.get('categories', [])
        contract_id = user_info['IDs'][0]['value']
        status_history = user_info.get('statusHistory', [])

        result = f"👤 الاسم: {contact['contactFirstName']} {contact['contactLastName']}\n"
        result += f"🆔 الرقم القومي: {contact.get('nationalID', 'غير متوفر')}\n"
        result += f"🏙️ المدينة: {contact['contactMedium'][0]['city']}\n"
        result += f"💳 رقم الحساب: {billing_account['IDs'][1]['value']}\n"
        result += f"🧾 كود العميل: {billing_account['IDs'][0]['value']}\n"
        result += f"📄 رقم العقد: {contract_id}\n\n"

        if categories:
            result += "📌 التصنيفات:\n"
            for cat in categories:
                result += f" - {cat['listHirarchyId']} : {cat['value']}\n"

        if subscriptions:
            result += "\n📜 الاشتراكات:\n"
            for sub in subscriptions:
                result += f" - {sub['name']}\n"

        if status_history:
            result += "\n📶 حالة الخط:\n"
            for st in status_history:
                status_text = "نشط" if st['status'] == "Active" else "موقوف"
                result += f" - {status_text} (السبب: {st['statusReason']})\n"

        bot.send_message(chat_id, result)

    except Exception as e:
        bot.send_message(chat_id, f"❌ فشل في جلب البيانات: {e}")

def get_flex_balance(token, number, chat_id):
    """دالة الحصول على نسبة الفليكس"""
    headers = {
        'Accept': 'application/json',
        'Accept-Language': 'EN',
        'Authorization': f"Bearer {token}",
        'Connection': 'keep-alive',
        'Content-Type': 'application/json',
        'Referer': 'https://web.vodafone.com.eg/spa/familySharing',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'clientId': 'WebsiteConsumer',
        'msisdn': number,
    }

    try:
        response = requests.get(
            f'https://web.vodafone.com.eg/services/dxl/usage/usageConsumptionReport?bucket.product.publicIdentifier={number}&@type=aggregated',
            headers=headers,
        )
        
        if response.status_code == 200:
            data = response.json()
            for item in data:
                if item.get("@type") == "OTHERS":
                    for bucket in item.get("bucket", []):
                        if bucket.get("usageType") == "limit":
                            for balance in bucket.get("bucketBalance", []):
                                if balance.get("@type") == "Remaining" and balance["remainingValue"]["units"] == "FLEX":
                                    return balance["remainingValue"]["amount"]
            return None
        else:
            return None
    except Exception:
        return None

def process_flex_info(number, password, chat_id):
    token = unified_login(number, password)
    if not token:
        bot.send_message(chat_id, "❌ فشل تسجيل الدخول - تأكد من صحة الرقم وكلمة المرور")
        return

    flex_balance = get_flex_balance(token, number, chat_id)
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    if flex_balance is not None:
        result_message = f"🎯 نسبة الفليكس الحالية: {flex_balance} فليكس\n"
        result_message += f"🕒 وقت الاستعلام: {current_time}\n"
        if flex_balance < 1000:
            result_message += "⚠️النسبه فوق 30لاف"
        bot.send_message(chat_id, result_message)
    else:
        bot.send_message(chat_id, "❌ لم يتم العثور على بيانات الفليكس")

# ===== دوال إرسال الدعوة والقبول =====
def addMember(owner_number, member_number, token, value=10):
    """إرسال دعوة انضمام للعائلة"""
    headers = {
        'Accept': 'application/json',
        'Accept-Language': 'EN',
        'Authorization': token,
        'Connection': 'keep-alive',
        'Content-Type': 'application/json',
        'Origin': 'https://web.vodafone.com.eg',
        'Referer': 'https://web.vodafone.com.eg/spa/familySharing/manageFamily',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        "User-Agent": "okhttp/4.11.0",
        "x-agent-operatingsystem": "11",
        "clientId": "AnaVodafoneAndroid",
        "x-agent-device": "Samsung_Galaxy_A52",
        "x-agent-version": "2024.7.1",
        "x-agent-build": "600",
        'msisdn': owner_number,
        'sec-ch-ua': '"Not)A;Brand";v="8", "Chromium";v="138", "Google Chrome";v="138"',
        'sec-ch-ua-mobile': '?0',
    }

    json_data = {
        'name': 'FlexFamily',
        'type': 'SendInvitation',
        'category': [
            {
                'value': '523',
                'listHierarchyId': 'PackageID',
            },
            {
                'value': '47',
                'listHierarchyId': 'TemplateID',
            },
            {
                'value': '523',
                'listHierarchyId': 'TierID',
            },
            {
                'value': 'percentage',
                'listHierarchyId': 'familybehavior',
            },
        ],
        'parts': {
            'member': [
                {
                    'id': [
                        {
                            'value': owner_number,
                            'schemeName': 'MSISDN',
                        },
                    ],
                    'type': 'Owner',
                },
                {
                    'id': [
                        {
                            'value': member_number,
                            'schemeName': 'MSISDN',
                        },
                    ],
                    'type': 'Member',
                },
            ],
            'characteristicsValue': {
                'characteristicsValue': [
                    {
                        'characteristicName': 'quotaDist1',
                        'value': value,
                        'type': 'percentage',
                    },
                ],
            },
        },
    }

    response = requests.patch(
        'https://mobile.vodafone.com.eg/services/dxl/cg/customerGroupAPI/customerGroup',
        headers=headers,
        json=json_data,
    )
    
    if response.status_code in [200, 201]:
        return True, f"✅ تم إرسال الدعوة إلى ({member_number}) بنجاح - النسبة: {value}%"
    else:
        return False, f"❌ فشل إرسال الدعوة إلى ({member_number}) - الكود: {response.status_code}"

def accept_invitation(owner_number, member_number, token):
    """قبول دعوة الانضمام للعائلة"""
    if token == "error":
        return False, "❌ توكن غير صالح"

    url = "https://mobile.vodafone.com.eg/services/dxl/cg/customerGroupAPI/customerGroup"
    headers = {
        "api-host": "ProductOrderingManagement",
        "useCase": "MIProfile",
        "Authorization": token,
        "api-version": "v2",
        "x-agent-operatingsystem": "11",
        "clientId": "AnaVodafoneAndroid",
        "x-agent-device": "Samsung_Galaxy_A52",
        "x-agent-version": "2024.7.1",
        "x-agent-build": "600",
        "msisdn": member_number,
        "Accept": "application/json",
        "Accept-Language": "ar",
        "Content-Type": "application/json; charset=UTF-8",
        "Host": "mobile.vodafone.com.eg",
        "Connection": "Keep-Alive",
        "Accept-Encoding": "gzip",
        "User-Agent": "okhttp/4.11.0"
    }
    
    data = {
        "category": [{"listHierarchyId": "TemplateID", "value": "47"}],
        "name": "FlexFamily",
        "parts": {
            "member": [
                {"id": [{"schemeName": "MSISDN", "value": owner_number}], "type": "Owner"},
                {"id": [{"schemeName": "MSISDN", "value": member_number}], "type": "Member"}
            ]
        },
        "type": "AcceptInvitation"
    }
    
    response = requests.patch(url, headers=headers, json=data)
    response_text = response.text
    
    if response.status_code in [200, 201] or response_text == '{}':
        return True, f"✅ تم قبول الدعوة بنجاح"
    elif "Customer not eligible-Family member" in response_text:
        return True, f"⚠️ ({member_number}) موجود بالفعل في عائلة"
    else:
        return False, f"❌ خطأ في قبول الدعوة - الاستجابة: {response_text}"

def انتظار(ثواني, chat_id=None, نص="جاري الانتظار"):
    """دالة الانتظار مع إمكانية إرسال تحديثات للتلجرام"""
    if chat_id:
        bot.send_message(chat_id, f"⏳ {نص} {ثواني} ثانية...")
    
    for متبقي in range(ثواني, 0, -1):
        دقائق, ثواني_متبقية = divmod(متبقي, 60)
        time.sleep(1)
    
    return True

def محاولة_إرسال_الدعوة(رقم_الأونر, رقم_الفرد, توكن_الأونر, النسبة, chat_id, عدد_المحاولات=3):
    """محاولة إرسال الدعوة مع إعادة المحاولة"""
    if chat_id:
        bot.send_message(chat_id, f"🚀 بدء محاولات إرسال الدعوة ({عدد_المحاولات} محاولات)...")
    
    for محاولة in range(1, عدد_المحاولات + 1):
        if chat_id:
            bot.send_message(chat_id, f"📤 المحاولة رقم {محاولة} لإرسال الدعوة...")
        
        نجاح, رسالة = addMember(رقم_الأونر, رقم_الفرد, توكن_الأونر, النسبة)
        
        if نجاح:
            if chat_id:
                bot.send_message(chat_id, f"✅ نجحت المحاولة رقم {محاولة} في إرسال الدعوة")
            return True, رسالة
        else:
            if محاولة < عدد_المحاولات:
                if chat_id:
                    bot.send_message(chat_id, f"⏳ فشلت المحاولة رقم {محاولة}، جاري الانتظار 60 ثانية للمحاولة التالية...")
                انتظار(60, chat_id, "انتظار لإعادة إرسال الدعوة")
            else:
                if chat_id:
                    bot.send_message(chat_id, f"❌ فشلت جميع محاولات إرسال الدعوة بعد {عدد_المحاولات} محاولات")
    
    return False, رسالة

def محاولة_قبول_الدعوة(رقم_الأونر, رقم_الفرد, توكن_الفرد, chat_id, عدد_المحاولات=3):
    """محاولة قبول الدعوة مع إعادة المحاولة"""
    if chat_id:
        bot.send_message(chat_id, f"🤝 بدء محاولات قبول الدعوة ({عدد_المحاولات} محاولات)...")
    
    for محاولة in range(1, عدد_المحاولات + 1):
        if chat_id:
            bot.send_message(chat_id, f"✅ المحاولة رقم {محاولة} لقبول الدعوة...")
        
        نجاح, رسالة = accept_invitation(رقم_الأونر, رقم_الفرد, توكن_الفرد)
        
        if نجاح:
            if chat_id:
                bot.send_message(chat_id, f"✅ نجحت المحاولة رقم {محاولة} في قبول الدعوة")
            return True, رسالة
        else:
            if محاولة < عدد_المحاولات:
                if chat_id:
                    bot.send_message(chat_id, f"⏳ فشلت المحاولة رقم {محاولة}، جاري الانتظار 60 ثانية للمحاولة التالية...")
                انتظار(60, chat_id, "انتظار لإعادة قبول الدعوة")
            else:
                if chat_id:
                    bot.send_message(chat_id, f"❌ فشلت جميع محاولات قبول الدعوة بعد {عدد_المحاولات} محاولات")
    
    return False, رسالة

def process_invitation_accept(owner_number, owner_password, member_number, member_password, percentage, chat_id):
    """معالجة عملية إرسال الدعوة والقبول"""
    try:
        bot.send_message(chat_id, "🔐 جاري تسجيل دخول الأونر...")
        owner_token = unified_login(owner_number, owner_password)
        
        if not owner_token:
            bot.send_message(chat_id, "❌ فشل تسجيل دخول الأونر! تأكد من صحة الرقم وكلمة المرور")
            return
        
        bot.send_message(chat_id, "🔐 جاري تسجيل دخول الفرد...")
        member_token = unified_login(member_number, member_password)
        
        if not member_token:
            bot.send_message(chat_id, "❌ فشل تسجيل دخول الفرد! تأكد من صحة الرقم وكلمة المرور")
            return
        
        # إرسال الدعوة
        success_send, send_message = محاولة_إرسال_الدعوة(owner_number, member_number, f"Bearer {owner_token}", percentage, chat_id)
        
        if not success_send:
            bot.send_message(chat_id, "❌ توقف العملية بسبب فشل إرسال الدعوة")
            return
        
        bot.send_message(chat_id, send_message)
        
        # انتظار قبل القبول
        bot.send_message(chat_id, "⏳ جاري الانتظار قبل قبول الدعوة...")
        انتظار(10, chat_id, "انتظار قبل القبول")
        
        # قبول الدعوة
        success_accept, accept_message = محاولة_قبول_الدعوة(owner_number, member_number, f"Bearer {member_token}", chat_id)
        
        bot.send_message(chat_id, accept_message)
        
        if success_accept:
            bot.send_message(chat_id, f"🎉 تمت العملية بنجاح!\n\n"
                                     f"✅ الأونر: {owner_number}\n"
                                     f"✅ الفرد: {member_number}\n"
                                     f"✅ النسبة: {percentage}%\n"
                                     f"✅ الوقت: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        else:
            bot.send_message(chat_id, f"⚠️ تم إرسال الدعوة ولكن فشل قبولها\n"
                                     f"📱 يمكن للفرد قبول الدعوة يدوياً")
            
    except Exception as e:
        bot.send_message(chat_id, f"❌ حدث خطأ غير متوقع: {str(e)}")

# ===== نظام البوت الرئيسي مع التسجيل الدائم =====
@bot.message_handler(commands=['start'])
def send_welcome(message):
    try:
        chat_id = message.chat.id
        
        if is_user_registered(chat_id):
            # إذا كان المستخدم مسجل - عرض القائمة الرئيسية مباشرة
            show_main_menu(message)
        else:
            # إذا لم يكن مسجل - طلب التسجيل
            show_registration_welcome(message)
            
    except Exception as e:
        bot.reply_to(message, f"❌ حدث خطأ: {str(e)}")

def show_registration_welcome(message):
    """عرض رسالة ترحيب وطلب التسجيل"""
    welcome_text = "🎯 أهلاً بك في البوت المتكامل لفودافون!\n\n"
    welcome_text += "🔐 يبدو أن هذا هو أول استخدام لك.\n"
    welcome_text += "يجب التسجيل مرة واحدة فقط لاستخدام جميع الخدمات.\n\n"
    welcome_text += "📝 سيتم حفظ بياناتك بشكل آمن ولن تحتاج للتسجيل مرة أخرى."
    
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    btn1 = types.KeyboardButton("📝 التسجيل الآن")
    btn2 = types.KeyboardButton("ℹ️ معلومات عن البوت")
    markup.add(btn1, btn2)
    
    bot.send_message(message.chat.id, welcome_text, reply_markup=markup)

@bot.message_handler(func=lambda m: m.text == "📝 التسجيل الآن")
def start_registration(message):
    """بدء عملية التسجيل"""
    msg = bot.send_message(message.chat.id, "📱 يرجى إدخال رقم الهاتف (11 رقم):")
    bot.register_next_step_handler(msg, process_registration_phone)

def process_registration_phone(message):
    """معالجة رقم الهاتف للتسجيل"""
    try:
        chat_id = message.chat.id
        phone = message.text.strip()
        
        # التحقق من صحة الرقم
        if not re.match(r'^01[0-9]{9}$', phone):
            msg = bot.send_message(chat_id, "❌ رقم الهاتف غير صحيح. يرجى إدخال رقم مصري صحيح (11 رقم):")
            bot.register_next_step_handler(msg, process_registration_phone)
            return
        
        user_data[chat_id] = {'phone': phone}
        msg = bot.send_message(chat_id, "🔑 يرجى إدخال كلمة المرور:")
        bot.register_next_step_handler(msg, process_registration_password)
        
    except Exception as e:
        bot.send_message(chat_id, f"❌ حدث خطأ: {str(e)}")

def process_registration_password(message):
    """معالجة كلمة المرور للتسجيل"""
    try:
        chat_id = message.chat.id
        password = message.text.strip()
        
        if chat_id not in user_data:
            bot.send_message(chat_id, "❌ لم يتم إدخال رقم الهاتف. أرسل /start للبدء من جديد.")
            return
        
        phone = user_data[chat_id]['phone']
        
        # محاولة تسجيل الدخول للتحقق من صحة البيانات
        bot.send_message(chat_id, "⏳ جاري التحقق من بياناتك...")
        token = unified_login(phone, password)
        
        if token:
            # التسجيل ناجح - حفظ البيانات بشكل دائم
            register_user(chat_id, phone, password)
            bot.send_message(chat_id, "✅ تم التسجيل بنجاح!\n\n"
                                     "🔐 تم حفظ بياناتك بشكل آمن.\n"
                                     "⚠️ لن تحتاج للتسجيل مرة أخرى في المستقبل.\n\n"
                                     "يمكنك الآن استخدام جميع الخدمات مباشرة.")
            show_main_menu(message)
        else:
            bot.send_message(chat_id, "❌ بيانات الدخول غير صحيحة. يرجى المحاولة مرة أخرى بأرسال /start")
            
    except Exception as e:
        bot.send_message(chat_id, f"❌ حدث خطأ: {str(e)}")

def show_main_menu(message):
    """عرض القائمة الرئيسية للمستخدمين المسجلين"""
    chat_id = message.chat.id
    
    # الحصول على بيانات المستخدم لعرضها
    phone, _ = get_user_credentials(chat_id)
    
    welcome_text = f"🚀 أهلاً بك مرة أخرى!\n\n"
    welcome_text += f"📱 رقمك المسجل: {phone}\n\n"
    welcome_text += "🔍 الخدمات المتاحة:\n\n"
    welcome_text += "📊 بيانات الخط - معلومات الحساب والاشتراكات\n"
    welcome_text += "👥 معرفة الأونر - بيانات مجموعة العائلة\n"
    welcome_text += "💳 نسبة الفليكس - معرفة رصيد الفليكس المتبقي\n"
    welcome_text += "📨 إرسال دعوة - إرسال دعوة انضمام للعائلة\n"
    welcome_text += "👤 إدارة الحساب - تحديث أو حذف البيانات\n\n"
    welcome_text += "اختر الخدمة التي تريدها:"
    
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    btn1 = types.KeyboardButton("📊 بيانات الخط")
    btn2 = types.KeyboardButton("👥 معرفة الأونر")
    btn3 = types.KeyboardButton("💳 نسبة الفليكس")
    btn4 = types.KeyboardButton("📨 إرسال دعوة")
    btn5 = types.KeyboardButton("👤 إدارة الحساب")
    btn6 = types.KeyboardButton("🆘 المساعدة")
    markup.add(btn1, btn2, btn3, btn4, btn5, btn6)
    
    bot.send_message(chat_id, welcome_text, reply_markup=markup)

# ===== معالجة الخدمات للمستخدمين المسجلين =====
@bot.message_handler(func=lambda m: m.text in ["📊 بيانات الخط", "👥 معرفة الأونر", "💳 نسبة الفليكس"])
def handle_services(message):
    chat_id = message.chat.id
    
    if not is_user_registered(chat_id):
        bot.send_message(chat_id, "❌ يجب التسجيل أولاً. أرسل /start")
        return
    
    # استخدام البيانات المسجلة مسبقاً
    phone, password = get_user_credentials(chat_id)
    
    service_type = message.text
    bot.send_message(chat_id, "⏳ جاري معالجة طلبك، يرجى الانتظار...")
    
    if service_type == "📊 بيانات الخط":
        thread = Thread(target=process_line_info, args=(phone, password, chat_id))
    elif service_type == "👥 معرفة الأونر":
        thread = Thread(target=process_vodafone_family_info, args=(phone, password, chat_id))
    elif service_type == "💳 نسبة الفليكس":
        thread = Thread(target=process_flex_info, args=(phone, password, chat_id))
    else:
        bot.send_message(chat_id, "❌ خدمة غير معروفة.")
        return
        
    thread.start()

@bot.message_handler(func=lambda m: m.text == "📨 إرسال دعوة")
def start_invitation_process(message):
    """بدء عملية إرسال الدعوة"""
    chat_id = message.chat.id
    
    if not is_user_registered(chat_id):
        bot.send_message(chat_id, "❌ يجب التسجيل أولاً. أرسل /start")
        return
    
    msg = bot.send_message(chat_id, "👑 أدخل رقم الأونر:")
    bot.register_next_step_handler(msg, process_owner_number)

def process_owner_number(message):
    """معالجة رقم الأونر"""
    chat_id = message.chat.id
    owner_number = message.text.strip()
    
    if not re.match(r'^01[0-9]{9}$', owner_number):
        msg = bot.send_message(chat_id, "❌ رقم الأونر غير صحيح. يرجى إدخال رقم مصري صحيح (11 رقم):")
        bot.register_next_step_handler(msg, process_owner_number)
        return
    
    user_data[chat_id] = {'owner_number': owner_number}
    msg = bot.send_message(chat_id, "🔑 أدخل كلمة سر الأونر:")
    bot.register_next_step_handler(msg, process_owner_password)

def process_owner_password(message):
    """معالجة كلمة سر الأونر"""
    chat_id = message.chat.id
    owner_password = message.text.strip()
    
    user_data[chat_id]['owner_password'] = owner_password
    msg = bot.send_message(chat_id, "👤 أدخل رقم الفرد المراد إرسال الدعوة له:")
    bot.register_next_step_handler(msg, process_member_number)

def process_member_number(message):
    """معالجة رقم الفرد"""
    chat_id = message.chat.id
    member_number = message.text.strip()
    
    if not re.match(r'^01[0-9]{9}$', member_number):
        msg = bot.send_message(chat_id, "❌ رقم الفرد غير صحيح. يرجى إدخال رقم مصري صحيح (11 رقم):")
        bot.register_next_step_handler(msg, process_member_number)
        return
    
    user_data[chat_id]['member_number'] = member_number
    msg = bot.send_message(chat_id, "🔑 أدخل كلمة سر الفرد:")
    bot.register_next_step_handler(msg, process_member_password)

def process_member_password(message):
    """معالجة كلمة سر الفرد"""
    chat_id = message.chat.id
    member_password = message.text.strip()
    
    user_data[chat_id]['member_password'] = member_password
    
    # اختيار النسبة
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
    btn1 = types.KeyboardButton("10%")
    btn2 = types.KeyboardButton("20%")
    btn3 = types.KeyboardButton("40%")
    markup.add(btn1, btn2, btn3)
    
    msg = bot.send_message(chat_id, "📊 اختر نسبة التوزيع:", reply_markup=markup)
    bot.register_next_step_handler(msg, process_percentage_selection)

def process_percentage_selection(message):
    """معالجة اختيار النسبة"""
    chat_id = message.chat.id
    percentage_text = message.text.strip()
    
    percentage_map = {"10%": 10, "20%": 20, "40%": 40}
    percentage = percentage_map.get(percentage_text, 10)
    
    user_data[chat_id]['percentage'] = percentage
    
    # استعادة القائمة الرئيسية
    show_main_menu(message)
    
    # بدء عملية الإرسال والقبول
    owner_number = user_data[chat_id]['owner_number']
    owner_password = user_data[chat_id]['owner_password']
    member_number = user_data[chat_id]['member_number']
    member_password = user_data[chat_id]['member_password']
    
    bot.send_message(chat_id, f"🎬 بدء عملية إرسال الدعوة والقبول بنسبة {percentage}%...")
    
    # تشغيل في thread منفصل
    thread = Thread(target=process_invitation_accept, 
                   args=(owner_number, owner_password, member_number, member_password, percentage, chat_id))
    thread.start()

@bot.message_handler(func=lambda m: m.text == "👤 إدارة الحساب")
def manage_account(message):
    """إدارة حساب المستخدم"""
    chat_id = message.chat.id
    
    if not is_user_registered(chat_id):
        bot.send_message(chat_id, "❌ يجب التسجيل أولاً. أرسل /start")
        return
    
    user_info = registered_users.get(str(chat_id), {})
    phone = user_info.get('phone', 'غير معروف')
    reg_date = user_info.get('registration_date', 'غير معروف')
    
    account_text = f"👤 معلومات حسابك:\n\n"
    account_text += f"📱 رقم الهاتف: {phone}\n"
    account_text += f"📅 تاريخ التسجيل: {reg_date}\n\n"
    account_text += "اختر الإجراء المطلوب:"
    
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    btn1 = types.KeyboardButton("🔄 إعادة التسجيل")
    btn2 = types.KeyboardButton("🗑️ حذف الحساب")
    btn3 = types.KeyboardButton("🔙 القائمة الرئيسية")
    markup.add(btn1, btn2, btn3)
    
    bot.send_message(chat_id, account_text, reply_markup=markup)

@bot.message_handler(func=lambda m: m.text == "🔄 إعادة التسجيل")
def re_register_account(message):
    """إعادة تسجيل الحساب"""
    chat_id = message.chat.id
    delete_user(chat_id)
    bot.send_message(chat_id, "🔓 تم حذف بياناتك القديمة. يمكنك الآن التسجيل مرة أخرى.")
    show_registration_welcome(message)

@bot.message_handler(func=lambda m: m.text == "🗑️ حذف الحساب")
def delete_account(message):
    """حذف حساب المستخدم"""
    chat_id = message.chat.id
    
    if delete_user(chat_id):
        bot.send_message(chat_id, "✅ تم حذف حسابك بنجاح. يمكنك التسجيل مرة أخرى بأرسال /start")
    else:
        bot.send_message(chat_id, "❌ حسابك غير موجود.")

@bot.message_handler(func=lambda m: m.text == "🔙 القائمة الرئيسية")
def back_to_main(message):
    """العودة للقائمة الرئيسية"""
    show_main_menu(message)

@bot.message_handler(func=lambda m: m.text == "ℹ️ معلومات عن البوت")
def bot_info(message):
    """عرض معلومات عن البوت"""
    info_text = "🤖 البوت المتكامل لفودافون\n\n"
    info_text += "🔍 الخدمات المتاحة:\n"
    info_text += "• بيانات الخط والاشتراكات\n"
    info_text += "• معرفة مالك مجموعة العائلة\n"
    info_text += "• نسبة رصيد الفليكس\n"
    info_text += "• إرسال دعوة انضمام للعائلة\n\n"
    info_text += "🔐 نظام التسجيل:\n"
    info_text += "• تسجيل مرة واحدة فقط\n"
    info_text += "• بيانات آمنة ومشفرة\n"
    info_text += "• لا حاجة لإعادة التسجيل\n\n"
    info_text += "📞 الدعم: 01017143221\n\n"
    info_text += "🔒 نضمن خصوصية وأمان بياناتك"
    
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    btn1 = types.KeyboardButton("📝 التسجيل الآن")
    btn2 = types.KeyboardButton("🔙 الرجوع")
    markup.add(btn1, btn2)
    
    bot.send_message(message.chat.id, info_text, reply_markup=markup)

@bot.message_handler(func=lambda m: m.text == "🆘 المساعدة")
def send_help(message):
    help_text = "📖 أوامر البوت:\n\n"
    help_text += "📊 بيانات الخط - معلومات الحساب والاشتراكات\n"
    help_text += "👥 معرفة الأونر - بيانات مجموعة العائلة\n"
    help_text += "💳 نسبة الفليكس - معرفة رصيد الفليكس المتبقي\n"
    help_text += "📨 إرسال دعوة - إرسال دعوة انضمام للعائلة\n"
    help_text += "👤 إدارة الحساب - تحديث أو حذف البيانات\n"
    help_text += "🆘 المساعدة - عرض هذه الرسالة\n\n"
    help_text += "🔐 نظام التسجيل:\n"
    help_text += "• تسجيل مرة واحدة فقط عند أول استخدام\n"
    help_text += "• استخدام الخدمات مباشرة بعد التسجيل\n"
    help_text += "• إعادة التسجيل متاحة من إدارة الحساب\n\n"
    help_text += "📞 للتواصل: 01017143221"
    bot.reply_to(message, help_text)

@bot.message_handler(func=lambda m: m.text == "🔙 الرجوع")
def back_command(message):
    if is_user_registered(message.chat.id):
        show_main_menu(message)
    else:
        show_registration_welcome(message)

@bot.message_handler(func=lambda message: True)
def handle_message(message):
    if message.text.startswith('/'):
        bot.send_message(message.chat.id, "❌ أمر غير معروف. اختر من القائمة أو أرسل /help للمساعدة.")
    else:
        bot.send_message(message.chat.id, "🔍 اختر الخدمة التي تريدها من القائمة:")

# تشغيل البوت
if __name__ == '__main__':
    print("✅ تم تشغيل البوت المتكامل بنجاح...")
    print("🤖 البوت يدعم الآن نظام التسجيل الدائم")
    print("   🔐 تسجيل مرة واحدة فقط")
    print("   📊 بيانات الخط")
    print("   👥 معرفة الأونر") 
    print("   💳 نسبة الفليكس")
    print("   📨 إرسال دعوة")
    bot.infinity_polling()