using System;
using System.Collections;
using Unity.VisualScripting;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
       [SerializeField] private float basespeed;
       [SerializeField] private float speed;
       [SerializeField] private float speedincrease;
       [SerializeField] private float maxspeed;
       
       private Rigidbody rb;
       [SerializeField] private float slide;
       
       Vector3 moveDirection;
       
       bool vertical;
       private bool horizontal;
       
       [SerializeField] StandUpCollider standUp;
       
       [SerializeField] private string inputNameHorizontal;
       [SerializeField] private string inputNameVertical;
       
       public Transform player;
        
    
       private void Start()
       {
           rb =  GetComponent<Rigidbody>();
           standUp = GetComponentInChildren<StandUpCollider>();
       }

       void Update()
        {
            float horizontalInput = Input.GetAxis(inputNameHorizontal);
            float verticalInput = Input.GetAxis(inputNameVertical);
            horizontalInput = Mathf.Round(horizontalInput);
            verticalInput = Mathf.Round(verticalInput);

            
            if (horizontalInput != 0 && horizontal == true)
            {
                if (!standUp.ispushing && horizontalInput == 1)
                {
                    player.rotation = Quaternion.Euler(90f, 90f, 0f);
                }
                else if (!standUp.ispushing && horizontalInput == -1)
                {
                    player.rotation = Quaternion.Euler(90f, 260f, 0f);
                }
                else if (horizontalInput == 1)
                {
                    player.rotation = Quaternion.Euler(0f, 90f, 0f);
                }
                else if (horizontalInput == -1)
                {
                    player.rotation = Quaternion.Euler(0f, 260f, 0f);
                }
                vertical = false;
                moveDirection = new Vector3(horizontalInput,0, 0);
                moveDirection.Normalize();

                if (!vertical && speed <= maxspeed &&  !standUp.ispushing)
                {
                    speed += speedincrease;
                }
            }
            else if (verticalInput != 0 && vertical == true)
            {
                if (!standUp.ispushing && verticalInput == 1)
                {
                    player.rotation = Quaternion.Euler(90f, 0f, 0f);
                }
                else if (!standUp.ispushing && verticalInput == -1)
                {
                    player.rotation = Quaternion.Euler(90f, 180f, 0f);
                }
                else if (verticalInput == 1)
                {
                    player.rotation = Quaternion.Euler(0f, 0f, 0f);
                }
                else if (verticalInput == -1)
                {
                    player.rotation = Quaternion.Euler(0f, 180f, 0f);
                }
                horizontal = false;
                moveDirection = new Vector3(0, 0, verticalInput);
                moveDirection.Normalize();
                
                if (!horizontal && speed <= maxspeed &&  !standUp.ispushing)
                {
                    speed += speedincrease;
                }
                
            }
            else
            {
                StartCoroutine(Slide(slide));
                if (!standUp.ispushing)
                {
                    player.rotation = Quaternion.Euler(0f, 0f, 0f);
                }
            }
            transform.Translate(moveDirection * speed * Time.deltaTime, Space.World);
    
        }


        IEnumerator Slide(float delay)
        {
            yield return new WaitForSeconds(delay);
            moveDirection = new Vector3(0, 0, 0);
            horizontal = true;
            vertical = true;
            speed = basespeed;
            
        }
        
        
        
    
}
