using UnityEngine;

public abstract class PlayerBehaviour : MonoBehaviour
{
    protected PlayerScript _playerRef;

    protected string playerName;
    protected Color playerColor;

    protected virtual void Awake()
    {
        playerName = ChoosePlayerName();
        playerColor = ChoosePlayerColor();
         _playerRef = gameObject.GetComponent<PlayerScript>();
        SetPlayerName(playerName);
        SetPlayerColor(playerColor);
        _playerRef.IsHuman = ChooseIfPlayerIsHuman();
    }

    protected virtual void FixedUpdate()
    {
        sbyte direction = ChooseDirection();
        _playerRef.MoveVertically(direction,Time.deltaTime);
    }

    /// <summary>
    /// This method choose if the player goes up (+1) or down (-1).
    /// The way the decision is made is up to you.
    /// This method must return either +1 or -1 ONLY. 
    /// </summary>
    /// <returns>Returns only +1 or -1</returns>
    /// <remarks>This methof is called every frames</remarks>
    protected abstract sbyte ChooseDirection();
    protected abstract string ChoosePlayerName();
    protected abstract Color ChoosePlayerColor();
    protected abstract bool ChooseIfPlayerIsHuman();

    private void SetPlayerName(string name)
    {
        _playerRef.SetName(name);
    }

    private void SetPlayerColor(Color color)
    {
        _playerRef.SetColor(color);
    }
}