using System.Collections;
using UnityEngine;

namespace UNSLOW.EffectPractice.FirstTerm.Gauges
{
    public class RandomWalker : MonoBehaviour
    {
        [SerializeField] private float moveRange = 3f;
        [SerializeField] private float minMoveSpeed = 0.5f;
        [SerializeField] private float maxMoveSpeed = 2f;
        [SerializeField] private float rotationSpeed = 360f;
        [SerializeField] private float arriveDistance = 0.01f;

        private Vector3 _origin;

        private void Start()
        {
            StartCoroutine(RandomWalk());
        }

        private IEnumerator RandomWalk()
        {
            _origin = transform.position;

            while (true)
            {
                // ランダムな場所に向かって移動
                var targetPosition = _origin + new Vector3(
                    Random.Range(-moveRange, moveRange),
                    0f,
                    Random.Range(-moveRange, moveRange));
                var moveSpeed = Random.Range(minMoveSpeed, maxMoveSpeed);
                
                while (Vector3.Distance(transform.position, targetPosition) > arriveDistance)
                {
                    var direction = targetPosition - transform.position;
                    direction.y = 0f;

                    if (direction.sqrMagnitude > 0f)
                    {
                        var targetRotation = Quaternion.LookRotation(direction);
                        transform.rotation = Quaternion.RotateTowards(
                            transform.rotation,
                            targetRotation,
                            rotationSpeed * Time.deltaTime);
                    }

                    transform.position = Vector3.MoveTowards(
                        transform.position,
                        targetPosition,
                        moveSpeed * Time.deltaTime);

                    yield return null;
                }
                
                // ランダムに待機
                yield return new WaitForSeconds(Random.Range(0.5f, 1f));
            }
        }
    }
}
