import pytest
import asyncio
import sys
import os

# إضافة المسار الرئيسي للمشروع
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from ai_analyzer import المحلل_الذكي
from advanced_alerts import نظام_التنبيهات
from dashboard import لوحة_التحكم
from platform_integrations import منصات_التداول
from payment_system import نظام_الدفع
from loyalty_system import نظام_المكافآت
from security_system import نظام_الأمان
from database import get_session, المستخدم, الاشتراك

@pytest.fixture
def جلسة_اختبار():
    """إنشاء جلسة اختبار لقاعدة البيانات"""
    return get_session()

@pytest.fixture
def مستخدم_مثالي(جلسة_اختبار):
    """إنشاء مستخدم مثالي للاختبار"""
    مستخدم = المستخدم(
        معرف_تلغرام=123456,
        البريد_الإلكتروني='test@example.com',
        اسم_المستخدم='مستخدم_اختبار'
    )
    جلسة_اختبار.add(مستخدم)
    جلسة_اختبار.commit()
    return مستخدم

class اختبار_الذكاء_الاصطناعي:
    def test_تحليل_التوصيات(self):
        محلل = المحلل_الذكي()
        توصية = "شراء $BTC عند 50,000$ مع وقف خسارة 49,500$"
        
        نتيجة = محلل.تحليل_التوصيات(توصية)
        
        assert 'رمز_العملة' in نتيجة
        assert 'دقة_التوصية' in نتيجة
        assert نتيجة['رمز_العملة'] == 'BTC'
        assert 0 <= نتيجة['دقة_التوصية'] <= 100

class اختبار_التنبيهات:
    @pytest.mark.asyncio
    async def test_إنشاء_تنبيه(self, جلسة_اختبار):
        نظام = نظام_التنبيهات(جلسة_اختبار)
        
        معلومات_التداول = {
            'الرمز': 'BTC',
            'التوصية': 'شراء',
            'تقلب': 0.5,
            'حجم_التداول': 1000000,
            'السعر': 50000
        }
        
        تنبيهات = نظام.إنشاء_تنبيه_متقدم(معلومات_التداول)
        
        assert 'تنبيه_فوري' in تنبيهات
        assert 'تنبيه_استراتيجي' in تنبيهات
        assert 'تنبيه_مخاطر' in تنبيهات

class اختبار_لوحة_التحكم:
    def test_تقرير_الأداء(self, جلسة_اختبار, مستخدم_مثالي):
        لوحة = لوحة_التحكم(جلسة_اختبار)
        
        تقرير = لوحة.تقرير_أداء_المحفظة(مستخدم_مثالي.معرف)
        
        assert 'إجمالي_الأرباح' in تقرير
        assert 'نسبة_العائد' in تقرير
        assert 'أفضل_الصفقات' in تقرير

class اختبار_منصات_التداول:
    @pytest.mark.asyncio
    async def test_جلب_أسعار_العملات(self, جلسة_اختبار):
        منصات = منصات_التداول(جلسة_اختبار)
        
        الرموز = ['BTC', 'ETH', 'SOL']
        أسعار = await منصات.جلب_أسعار_العملات(الرموز)
        
        assert len(أسعار) == len(الرموز)
        for رمز, سعر in أسعار.items():
            assert isinstance(سعر, float)
            assert سعر > 0

class اختبار_نظام_الدفع:
    def test_إنشاء_فاتورة(self, جلسة_اختبار, مستخدم_مثالي):
        نظام = نظام_الدفع(جلسة_اختبار)
        
        فاتورة = نظام.إنشاء_فاتورة_دفع(مستخدم_مثالي, 'أساسي')
        
        assert 'معرف_الفاتورة' in فاتورة
        assert 'نوع_الاشتراك' in فاتورة
        assert فاتورة['نوع_الاشتراك'] == 'أساسي'
        assert فاتورة['المبلغ'] == 100

class اختبار_نظام_المكافآت:
    def test_حساب_النقاط(self, جلسة_اختبار, مستخدم_مثالي):
        نظام = نظام_المكافآت(جلسة_اختبار)
        
        نتائج = نظام.حساب_النقاط(مستخدم_مثالي)
        
        assert 'نقاط_الولاء' in نتائج
        assert 'مستوى_العضوية' in نتائج
        assert نتائج['مستوى_العضوية'] in ['برونزي', 'فضي', 'ذهبي', 'بلاتيني']

class اختبار_نظام_الأمان:
    def test_تشفير_البيانات(self, جلسة_اختبار):
        نظام = نظام_الأمان(جلسة_اختبار)
        
        بيانات_سرية = {
            'API_KEY': 'your_secret_key',
            'محفظة': '0x1234...'
        }
        
        # اختبار التشفير
        بيانات_مشفرة = نظام.تشفير_البيانات(بيانات_سرية)
        
        assert 'البيانات_المشفرة' in بيانات_مشفرة
        assert 'الملح' in بيانات_مشفرة

    def test_التحقق_من_كلمة_المرور(self, جلسة_اختبار):
        نظام = نظام_الأمان(جلسة_اختبار)
        
        # اختبار كلمات مرور مختلفة
        assert نظام.التحقق_من_كلمة_المرور('StrongPass123!') == True
        assert نظام.التحقق_من_كلمة_المرور('weak') == False

# تشغيل الاختبارات
def test_suite():
    pytest.main([__file__])

if __name__ == '__main__':
    test_suite()
