using UnityEngine;

public class MovingPlatformPath : MonoBehaviour
{
    [Header("Movement Settings")]
    public float moveSpeed = 2f;
    public float waitTime = 1f;
    public bool moveOnStart = true;
    
    public GameObject Player;

    private Transform startPoint;
    private Transform endPoint;
    private Vector3 startPosition;
    private Vector3 endPosition;
    private Vector3 targetPosition;
    private bool isWaiting = false;
    private float waitTimer = 0f;
    private bool isGoingEnd = true;


    private void Start()
    {
        InitializeWaypoints();

        if (startPoint != null && endPoint != null)
        {
            startPosition = startPoint.position;
            endPosition = endPoint.position;
            targetPosition = endPoint.position;
        }
    }

    private void Update()
    {
        if (isWaiting)
        {
            waitTimer -= Time.deltaTime;
            if (waitTimer <= 0f)
            {
                isWaiting = false;
                SwitchTarget();
            }
            return;
        }

        MovePlatform();
    }

    private void InitializeWaypoints()
    {
        startPoint = transform.Find("Waypoint_Start");
        if (startPoint == null)
        {
            Debug.LogError("ERRORE: StartPoint non trovato");
        }

        endPoint = transform.Find("Waypoint_End");
        if (endPoint == null)
        {
            Debug.LogError("ERRORE: EndPoint non trovato");
        }
    }

    private void MovePlatform()
    {
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);

        if (Vector3.Distance(transform.position, targetPosition) < 0.1f)
        {
            transform.position = targetPosition;
            StartWaiting();
        }
    }

    private void StartWaiting()
    {
        if (waitTime > 0f)
        {
            isWaiting = true;
            waitTimer = waitTime;
        }
        else
        {
            SwitchTarget();
        }
    }

    private void SwitchTarget()
    {
        isGoingEnd = !isGoingEnd;
        targetPosition = isGoingEnd ? endPosition : startPosition;
    }

    private void OnTriggerEnter(Collider other) 
    {
        if (other.gameObject == Player)
        {
            Player.transform.parent = transform;
            
            Debug.Log("Player salito sulla piattaforma");
        }
    }

    private void OnCollisionExit(Collision other) 
    {
        if (other.gameObject == Player)
        {
            Player.transform.parent = null;
            
            Debug.Log("Player sceso dalla piattaforma");
        }
    }
}
