using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR;

public class ViveInput : MonoBehaviour
{
    public PlayerReplay playerReplay;
    public BodySourceView bsv;

    private SteamVR_Action_Boolean grabPinch;
    private SteamVR_Action_Boolean grabGrib;
    private SteamVR_Action_Boolean teleport;

    private bool isRecording;
    private float recordingTime;

    private static bool isPlaying;
    public float csvTime;

    private void Start()
    {
        grabPinch = SteamVR_Actions.default_GrabPinch;
        grabGrib = SteamVR_Actions.default_GrabGrip;
        teleport = SteamVR_Actions.default_Teleport;
    }

    void Update()
    {
        if (grabPinch.GetStateDown(SteamVR_Input_Sources.Any) && !isPlaying)
        {
            Debug.Log("Loading...");
            csvTime = 0;
            isPlaying = true;
            playerReplay.Load();
        }

        if (teleport.GetStateDown(SteamVR_Input_Sources.Any))
        {
            if (!isRecording)
            {
                Debug.Log("Recording...");
                isRecording = true;
            }
            else
            {
                Debug.Log("Saving...");
                isRecording = false;
                recordingTime = 0;
                playerReplay.Save();
                playerReplay.ResetRecording();
            }
        }

        if (grabGrib.GetStateDown(SteamVR_Input_Sources.Any))
        {
            
        }

        if (isRecording)
        {
            playerReplay.AddJoints(recordingTime);
            recordingTime += Time.deltaTime;
        }

        if (isPlaying)
        {
            csvTime += Time.deltaTime;
        }

        // TODO: Test haptic
        if (Input.GetKeyDown(KeyCode.Q))
        {
            SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.LeftHand].Execute(0, 1, 10, 1);
        }
        if (Input.GetKeyDown(KeyCode.W))
        {
            SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.RightHand].Execute(0, 1, 10, 1);
        }
        if (Input.GetKeyDown(KeyCode.E))
        {
            SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.LeftFoot].Execute(0, 1, 10, 1);
        }
        if (Input.GetKeyDown(KeyCode.R))
        {
            SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.RightFoot].Execute(0, 1, 10, 1);
        }
    }

    public static IEnumerator WaitForControllerPress()
    {
        while (true)
        {
            if (SteamVR_Actions.default_GrabPinch.GetStateDown(SteamVR_Input_Sources.Any) || Input.GetKeyDown(KeyCode.Space))
            {
                break;
            }
            yield return null;
        }
    }

    public static void StopPlaying()
    {
        isPlaying = false;
    }
}
