using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class BoatController : MonoBehaviour
{
    private Rigidbody rigidBody;

    [SerializeField]
    private float ForwardFactor = 1f;
    [SerializeField]
    private float RotationFactor = 1f;
    [SerializeField]
    private float BrakeFactor = 1f;

    void Awake()
    {
        rigidBody = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        //get input
        if (Input.GetKeyDown(KeyCode.A))
        {
            RowLeft();
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            RowRight();
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            Brake();
        }
    }

    private void FixedUpdate()
    {
        print(transform.rotation.eulerAngles.y);
        //constrain rotation
        if (transform.rotation.eulerAngles.y > 180 && transform.rotation.eulerAngles.y < 270)
        {
            print("under");
            transform.rotation = Quaternion.Euler(new Vector3(0f, 270f, 0f));
            rigidBody.angularVelocity = Vector3.zero;
        }

        //constrain rotation
        if (transform.rotation.eulerAngles.y < 180 && transform.rotation.eulerAngles.y > 90f)
        {
            print("over");
            transform.rotation = Quaternion.Euler(new Vector3(0f, 90f, 0f));
            rigidBody.angularVelocity = Vector3.zero;
        }
    }

    public void RowLeft()
    {
        rigidBody.AddForce(transform.forward * ForwardFactor, ForceMode.Acceleration);
        rigidBody.AddTorque(transform.up * -RotationFactor);
    }

    public void RowRight()
    {
        rigidBody.AddForce(transform.forward * ForwardFactor, ForceMode.Acceleration);
        rigidBody.AddTorque(transform.up * RotationFactor);
    }

    public void Brake()
    {
        rigidBody.AddForce(rigidBody.velocity * - BrakeFactor);
        rigidBody.AddTorque(rigidBody.angularVelocity * -BrakeFactor);
    }
}
