Making an enemy face the Player

I am trying to make the enemy look at the player and follow him, however I can’t just use transform.LookAt since I want the motion to be realistic and not immediately snap to face the player. so what I was doing is calculate the angle between the player and the enemy an rotating the enemy with a certain speed to that angle, like so:

    angleToTarget = Mathf.Atan((moveTo.x - transform.position.x) /
     (moveTo.z - transform.position.z)) * Mathf.Rad2Deg;
transform.eulerAngles = new Vector3(0, Mathf.MoveTowardsAngle(transform.eulerAngles.y, angleToTarget, Time.deltaTime * horizontalRotation), 0);

This is working for certain angles but at some point (I can’t figure out when exactly) the enemy rotates exactly the opposite way that it should be facing.

Can anyone help please ?

Since Tan and ATan can only return values between 90 and -90 I had to use ATan2 like so:

angleToTarget = Mathf.Atan2((moveTo.x - transform.position.x), (moveTo.z - transform.position.z)) * Mathf.Rad2Deg;
transform.eulerAngles = new Vector3(0,
 Mathf.MoveTowardsAngle(transform.eulerAngles.y, angleToTarget, Time.deltaTime * horizontalRotation), 0);