from controller import Robot, Motor, DistanceSensor, Compass, GPS

# إعداد الروبوت
robot = Robot()
timestep = int(robot.getBasicTimeStep())

# إعداد المحركات
left_motor = robot.getDevice('left wheel motor')
right_motor = robot.getDevice('right wheel motor')
left_motor.setPosition(float('inf'))
right_motor.setPosition(float('inf'))
left_motor.setVelocity(0.0)
right_motor.setVelocity(0.0)

# إعداد مستشعرات المسافة
front_sensor = robot.getDevice('front distance sensor')
left_sensor = robot.getDevice('left distance sensor')
right_sensor = robot.getDevice('right distance sensor')
front_sensor.enable(timestep)
left_sensor.enable(timestep)
right_sensor.enable(timestep)

# إعداد مستشعر الكرة (IR أو GPS)
ball_sensor = robot.getDevice('ball sensor')
ball_sensor.enable(timestep)

# إعداد البوصلة لتحديد الاتجاه
compass = robot.getDevice('compass')
compass.enable(timestep)

# إعداد GPS لتحديد موقع الروبوت
gps = robot.getDevice('gps')
gps.enable(timestep)

# وظائف مساعدة
def avoid_obstacles():
    front = front_sensor.getValue()
    left = left_sensor.getValue()
    right = right_sensor.getValue()
    left_speed = 3.0
    right_speed = 3.0
    if front < 800:
        # الابتعاد عن العائق أمام الروبوت
        left_speed = -2.0
        right_speed = 2.0
    elif left < 500:
        left_speed = 2.0
        right_speed = 0.0
    elif right < 500:
        left_speed = 0.0
        right_speed = 2.0
    return left_speed, right_speed

def move_towards_ball():
    ball_val = ball_sensor.getValue()
    left_speed = 3.0
    right_speed = 3.0
    if ball_val < 900:
        # تحريك الروبوت باتجاه الكرة
        left_speed = 2.0
        right_speed = 2.0
    return left_speed, right_speed

# الحلقة الرئيسية
while robot.step(timestep) != -1:
    # تجنب العوائق أولاً
    left_speed, right_speed = avoid_obstacles()

    # إذا لم يكن هناك عائق قريب، تتبع الكرة
    if front_sensor.getValue() > 800:
        left_speed, right_speed = move_towards_ball()

    # إرسال السرعات للمحركات
    left_motor.setVelocity(left_speed)
    right_motor.setVelocity(right_speed)
