How do you determine, if an enemy "sees player"?
If that's controlled by a range (usually larger than the attack range), that would make for three ranges:
chase range
detection range
attack range
Likely the list above is in descending order.
What happens, if all three ranges are set to the same value, and max. movement speed is zero?
If your implemented states are robust in edge cases like "player crosses mutliple thresholds before states are reevaluated", that should result in a turret.