from controller import Robot

# إعداد الروبوت
robot = Robot()
timestep = int(robot.getBasicTimeStep())

# إعداد المستشعرات
ir_ball_sensor = robot.getDevice("ir_ball_sensor")
ir_ball_sensor.enable(timestep)

compass = robot.getDevice("compass")
compass.enable(timestep)

gps = robot.getDevice("gps")
gps.enable(timestep)

sonar_left = robot.getDevice("sonar_left")
sonar_right = robot.getDevice("sonar_right")
sonar_left.enable(timestep)
sonar_right.enable(timestep)

# إعداد المحركات
left_motor = robot.getDevice("left_motor")
right_motor = robot.getDevice("right_motor")
left_motor.setPosition(float('inf'))
right_motor.setPosition(float('inf'))
left_motor.setVelocity(0.0)
right_motor.setVelocity(0.0)

# الثوابت
MAX_SPEED = 6.28

# دالة لحساب اتجاه الروبوت
def get_heading():
    compass_values = compass.getValues()
    import math
    rad = math.atan2(compass_values[0], compass_values[2])
    deg = rad * (180 / math.pi)
    return deg

# الحلقة الرئيسية
while robot.step(timestep) != -1:
    
    # قراءة مستشعر الكرة
    ball_detected = ir_ball_sensor.getValue() > 50  # قيمة افتراضية للتفعيل
    
    # قراءة مستشعرات السونار
    obstacle_left = sonar_left.getValue() < 0.5
    obstacle_right = sonar_right.getValue() < 0.5
    
    # تحرك افتراضي
    left_speed = 0.0
    right_speed = 0.0
    
    if ball_detected:
        # إذا تم الكشف عن الكرة، تحرك نحوها
        left_speed = 0.7 * MAX_SPEED
        right_speed = 0.7 * MAX_SPEED
    else:
        # إذا لم يتم اكتشاف الكرة، قم بتدوير الروبوت ببطء للبحث عنها
        left_speed = 0.3 * MAX_SPEED
        right_speed = -0.3 * MAX_SPEED
    
    # تجنب العقبات
    if obstacle_left:
        # انعطف يمينًا
        left_speed = 0.5 * MAX_SPEED
        right_speed = 0.0
    if obstacle_right:
        # انعطف يسارًا
        left_speed = 0.0
        right_speed = 0.5 * MAX_SPEED
    if obstacle_left and obstacle_right:
        # إذا كان هناك عقبة أمام الروبوت، ارجع إلى الخلف
        left_speed = -0.5 * MAX_SPEED
        right_speed = -0.5 * MAX_SPEED
    
    # تطبيق السرعات على المحركات
    left_motor.setVelocity(left_speed)
    right_motor.setVelocity(right_speed)