"""
اختبار التأثير الحراري للمجسات (-20°C إلى +40°C)
الاختبار الأكثر أهمية للتطبيقات الميدانية
"""

import numpy as np
from datetime import datetime

print("="*70)
print("🔥 اختبار التأثير الحراري للمجسات الأربعة")
print("المجال: -20°C ←→ +40°C (نموذج الظروف الميدانية)")
print(f"بداية الاختبار: {datetime.now()}")
print("="*70)

# درجات الحرارة للاختبار
temperatures = [-20, -10, 0, 10, 20, 30, 40]  # °C

# محاكاة بيانات الاختبار (في الواقع تكون قياسات حقيقية)
def simulate_thermal_test(sensor_id, temp):
    """محاكاة تأثير درجة الحرارة على المجس"""
    # السلوك النموذجي للمكونات الإلكترونية
    base_current = {
        1: 10.8, 2: 10.4, 3: 10.3, 4: 9.1
    }[sensor_id]
    
    # تأثير حراري نموذجي:
    # 1. عند البرودة الشديدة: تيار أقل (تغير في خصائص أشباه الموصلات)
    # 2. عند الحرارة: تيار أعلى (زيادة في تيار التسريب)
    
    if temp == -20:
        current_change = -0.3  # انخفاض في البرودة
    elif temp == -10:
        current_change = -0.2
    elif temp == 0:
        current_change = 0.0   # المرجع
    elif temp == 10:
        current_change = 0.1
    elif temp == 20:
        current_change = 0.2
    elif temp == 30:
        current_change = 0.35
    elif temp == 40:
        current_change = 0.5   # ارتفاع في الحرارة
    
    # إضافة بعض العشوائية الطبيعية
    noise = np.random.normal(0, 0.05)
    
    measured_current = base_current + current_change + noise
    
    # تأثير على القراءات (محاكاة لانحراف القياسات)
    # معامل حراري نموذجي: ~0.1%/°C للمجسات
    reading_error = (temp - 20) * 0.001  # 0.1% لكل °C عن 20°C
    
    return measured_current, reading_error

print("\n📊 خطة الاختبار:")
print("1. وضع المجسات في حجرة حرارية محكومة")
print("2. تثبيت كل درجة حرارة لمدة 30 دقيقة")
print("3. قياس: التيار، القراءة، الضوضاء")
print("4. تسجيل البيانات كل 5 دقائق")

print("\n" + "="*70)
print("🌡️ نتائج محاكاة الاختبار الحراري")
print("="*70)

# تخزين النتائج
results = {i: {'temperatures': [], 'currents': [], 'errors': []} for i in range(1, 5)}

for sensor_id in range(1, 5):
    print(f"\n📈 المجس #{sensor_id}:")
    print("-"*40)
    print("درجة الحرارة | التيار المقاس | انحراف القراءة")
    print("-"*40)
    
    for temp in temperatures:
        current, error = simulate_thermal_test(sensor_id, temp)
        results[sensor_id]['temperatures'].append(temp)
        results[sensor_id]['currents'].append(current)
        results[sensor_id]['errors'].append(error)
        
        print(f"{temp:5}°C      | {current:7.2f} mA   | {error*100:6.2f}%")

print("\n" + "="*70)
print("📈 تحليل معاملات درجة الحرارة (TC)")
print("="*70)

# حساب معامل درجة الحرارة لكل مجس
for sensor_id in range(1, 5):
    temps = results[sensor_id]['temperatures']
    errors = results[sensor_id]['errors']
    
    # تحليل خطي (معامل درجة الحرارة)
    if len(temps) > 1:
        # حساب الميل (TC = Δerror/Δtemp)
        temp_changes = [temps[i] - temps[0] for i in range(len(temps))]
        error_changes = [errors[i] - errors[0] for i in range(len(errors))]
        
        # تجنب القسمة على صفر
        valid_indices = [i for i, tc in enumerate(temp_changes) if abs(tc) > 0.1]
        if valid_indices:
            tc_values = []
            for i in valid_indices:
                if abs(temp_changes[i]) > 0.1:
                    tc = error_changes[i] / temp_changes[i] * 100  # %/°C
                    tc_values.append(tc)
            
            avg_tc = np.mean(tc_values) if tc_values else 0
            std_tc = np.std(tc_values) if len(tc_values) > 1 else 0
            
            # تقييم
            status = "✅ مقبول" if abs(avg_tc) < 0.1 else "⚠️  يحتاج تعويض"
            
            print(f"المجس #{sensor_id}:")
            print(f"  معامل الحرارة: {avg_tc:.3f} %/°C (±{std_tc:.3f})")
            print(f"  الحالة: {status}")
            
            if abs(avg_tc) > 0.1:
                print(f"  توصية: إضافة تعويض حراري في البرنامج:")
                print(f"          القراءة_المصححة = القراءة / (1 + {avg_tc:.4f}*(T-20))")

print("\n" + "="*70)
print("🔥 تحليل تفاوت التيار مع درجة الحرارة")
print("="*70)

# تحليل تفاوت التيار بين المجسات عند كل درجة حرارة
print("درجة الحرارة |  أعلى تيار  |  أقل تيار   |  التفاوت  |  الحالة")
print("-"*70)

for i, temp in enumerate(temperatures):
    currents_at_temp = []
    for sensor_id in range(1, 5):
        currents_at_temp.append(results[sensor_id]['currents'][i])
    
    max_current = max(currents_at_temp)
    min_current = min(currents_at_temp)
    variation = max_current - min_current
    
    # معيار: تفاوت أقل من 1.0mA
    status = "✅ جيد" if variation < 1.0 else "⚠️  كبير"
    
    print(f"{temp:5}°C      | {max_current:7.2f} mA | {min_current:7.2f} mA | "
          f"{variation:6.2f} mA | {status}")

print("\n" + "="*70)
print("🎯 تقييم الاختبار الحراري")
print("="*70)

# تقييم شامل
evaluation = {
    "معاملات الحرارة": all(abs(np.mean([results[i]['currents'][-1] - results[i]['currents'][0] 
                                       for i in range(1, 5)]) / 60) < 0.1),
    "تفاوت التيار": all([max(results[i]['currents']) - min(results[i]['currents']) < 1.5 
                        for i in range(1, 5)]),
    "استقرار القياسات": all([np.std(results[i]['errors']) < 0.2 for i in range(1, 5)]),
}

print("المعايير:")
for criterion, passed in evaluation.items():
    symbol = "✅" if passed else "❌"
    print(f"  {symbol} {criterion}")

passed_all = all(evaluation.values())

if passed_all:
    print("\n🎉 نتيجة الاختبار: ✅ النجاح الكامل")
    print("   المجسات مستقرة حرارياً وجاهزة للميدان")
else:
    print("\n⚠️  نتيجة الاختبار: ❌ تحتاج تحسينات")
    print("   بعض المعايير لم تتحقق")
    
    if not evaluation["معاملات الحرارة"]:
        print("   - تحتاج دوائر تعويض حراري أو تصحيح برمجي")
    if not evaluation["تفاوت التيار"]:
        print("   - تفاوت كبير في التيار بين المجسات")
        print("   - قد تحتاج تبديل منظمات الجهد")

print("\n" + "="*70)
print("📋 الخطوات التالية:")
print("="*70)

if passed_all:
    print("1. المضي قدماً إلى الاختبار 2: اختبار الضوضاء")
    print("2. إذا نجح جميع الاختبارات → الميدان")
else:
    print("1. تطبيق التعويض الحراري في البرنامج")
    print("2. إعادة الاختبار الحراري بعد التصحيح")
    print("3. إذا استمرت المشكلة → تبديل مكونات")

print(f"\n⏰ وقت الاختبار المقدر: 4-6 ساعات")
print("🔧 المعدات المطلوبة: حجرة حرارية، مقاييس تيار، مسجلات بيانات")
print("👤 الفريق: فني اختبارات + مهندس إلكترونيات")
