using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class InputBinario : MonoBehaviour {

    public string tecla = "space";
    public bool apretado;
    public bool ingresando;
    public float intervalo = .8f;
    public float tiempo = 0f;

    [Header("Comandos")]
    public string acelerar;
    public string frenar;
    public string girarIzquierdaMin;
    public string girarIzquierdaMax;
    public string girarDerechaMin;
    public string girarDerechaMax;

    [Header("Valores Timón")]
    public float timonMenor;
    public float timonMayor;

    [Space(10f)]
    public string mensaje;
    public Text cartel;

    private Dictionary<string, System.Action> comandos;

    private void Start()
    {
        comandos = new Dictionary<string, System.Action>();
        comandos.Add(frenar, nave.Frenar);
        comandos.Add(acelerar, nave.Acelerar);
        comandos.Add(girarIzquierdaMin, () => nave.Girar(timonMenor));
        comandos.Add(girarDerechaMin, () => nave.Girar(-timonMenor));
        comandos.Add(girarIzquierdaMax, () => nave.Girar(timonMayor));
        comandos.Add(girarDerechaMax, () => nave.Girar(-timonMayor));
    }

    public ControlNave nave { get { return ControlNave.instancia; } }

    void Update()
    {
        if (Input.GetKeyDown(tecla))
            Apretar();
        else if (Input.GetKeyUp(tecla))
            Soltar();

        if(ingresando)
        {
            tiempo += Time.deltaTime;

            if(tiempo >= intervalo)
            {
                tiempo -= intervalo;
                mensaje += apretado ? "1" : "0";
                cartel.text = mensaje;

                System.Action accion;
                if (comandos.TryGetValue(mensaje, out accion))
                {
                    Transmisor.instancia.Enviar(accion);
                    mensaje = "";
                    ingresando = false;
                }
                else if (mensaje.Length > 4)
                    mensaje = mensaje.Substring(1);
            }
        }
    }

    private IEnumerator BorrarMensaje()
    {
        yield return new WaitForSeconds(1);
        cartel.text = mensaje;
    }

    private void Apretar()
    {
        if (!ingresando)
        {
            ingresando = true;
            tiempo = intervalo;
        }
        apretado = true;
    }

    private void Soltar()
    {
        apretado = false;
    }
}
