# الهدف منه هو ملاحقة الكرة ويتجنب العقبات اللي امامه

# =========================================================
# الخطوة الأولى: نجهز الروبوت ومستشعراته
# =========================================================

# هنا نعرف الروبوت
robot = Robot()

# الوقت اللي يحتاجه الروبوت عشان يتخذ قرار في كل خطوة
timestep = int(robot.getBasicTimeStep())

# أقصى سرعة ممكنة للعجلات
MAX_SPEED = 6.28

# نحدد العجلات ونفعلها
left_wheel = robot.getDevice('left wheel motor')
right_wheel = robot.getDevice('right wheel motor')
left_wheel.setPosition(float('inf'))
right_wheel.setPosition(float('inf'))
left_wheel.setVelocity(0.0)
right_wheel.setVelocity(0.0)

# نحدد مستشعر الكرة (اللي يشوف الكرة) ومستشعر السونار (اللي يشوف العقبات)
ball_sensor = robot.getDevice('ball sensor')
ball_sensor.enable(timestep)

sonar = robot.getDevice('sonar')
sonar.enable(timestep)

# =========================================================
# الخطوة الثانية: نبدأ العمل
# =========================================================

# هنا حلقة العمل الرئيسية، كل قرارات الروبوت تصير داخلها
while robot.step(timestep) != -1:
    
    # نقرأ كل البيانات من المستشعرات
    ball_data = ball_sensor.getValues()
    ball_angle = ball_data[0] # زاوية الكرة
    ball_distance = ball_data[1] # مسافة الكرة
    
    sonar_distance = sonar.getValue() # مسافة العقبة
    
    # نجهز السرعات، بعد شوي راح نغيرها
    left_speed = 0
    right_speed = 0
    
    # هنا نبدأ المنطق. الأولوية دايماً هي السلامة
    # أول شيء نسأل: "هل يوجد شيء قريب أمامي؟"
    if sonar_distance < 0.5: # 0.5 متر تعتبر مسافة خطرة
        # لو فيه عقبة، نرجع للخلف ونستدير عشان نبتعد عنها
        left_speed = -2.0
        right_speed = 2.0
    
    # وإذا كان الطريق فاضي وما فيه عقبات
    else:
        # هنا نسأل: "هل رأيت الكرة؟" 
        if ball_distance > 0: # يعني الكرة موجودة
            
            # إذا الكرة أمامنا بالضبط
            if -0.1 < ball_angle < 0.1:
                # نمشي للأمام مباشرة
                left_speed = MAX_SPEED
                right_speed = MAX_SPEED
            # وإذا الكرة على اليمين شوي
            elif ball_angle > 0.1:
                # نستدير لليمين
                left_speed = 4.0
                right_speed = -1.0
            # وإذا الكرة على اليسار شوي
            elif ball_angle < -0.1:
                # نستدير لليسار
                left_speed = -1.0
                right_speed = 4.0
        
        # وإذا لم نجد الكرة أبداً
        else:
            # نستدير ببطء عشان نبحث عنها
            left_speed = 2.0
            right_speed = -2.0
            
    # وأخيراً، نعطي الأوامر للعجلات
    left_wheel.setVelocity(left_speed)
    right_wheel.setVelocity(right_speed)