using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using omFrame;
using omFrame.Static;
using omFrame.Table;

using Autohand;
using FTS;
using FTS.Device;
using FTS.Component;
using omFrame.Utility;
using UnityEngine.Events;
using DG.Tweening;

public class TaillHook_HandsUpDelay_Cross : TailHook_Gesture
{
    // 이 스크립트는 TriggerStay용 Gesture Script

    public UnityEvent toQuest;
    public float press = 0;
    public GestureType m_gestureType = GestureType.None;

    public bool BackMovebool = false;
    public Vector3 m_BackPoint = new Vector3(45, 0, 44);

    public bool RightHand = false;
    public bool LeftHand = false;

    GameObject Cable1;
    GameObject Cable2;

    bool ForSoundChangeBool = false;
    void OnEnable()
    {
        // 이 스크립트가 켜지면 프로그래스바를 생성하기 위해 OnEnable에 선언
        omFrameWork.Inst.Dialog.GetWSHud.OpenProgressBar();

        gameObject.GetComponent<BoxCollider>().enabled = true;

        Cable1 = GameObject.Find("Cable1");
        Cable2 = GameObject.Find("Cable2");
    }

    void F16_DestroyHook()
    {
        if (BackMovebool == true)
        {
            //뒤로가고 후크 삭제
            GameObject.Find("F-16_Landing").transform.DOLocalMoveX(-345f, 8f);
        }
        // 훅에 걸린 라인렌더러 삭제 (케이블 오브젝트 삭제하는게 나은거 같음)
        //  GameObject.Find("Cable1").SetActive(false);
        // GameObject.Find("Cable2").SetActive(false);

        //test1.gameObject.GetComponent<omCable>().lineRenderer.enabled = false;
        //test2.gameObject.GetComponent<omCable>().lineRenderer.enabled = false;
    }

    IEnumerator GaugeCoroutine()
    {
        press += 0.025f;
        yield return new WaitForSeconds(1f);
    }

    void OnTriggerEnter(Collider coll)
    {
        if (coll.gameObject.name == "DestroyCable" || coll.gameObject.name == "Hook")
        {
            Destroy(Cable1);
            Destroy(Cable2);
        }
    }

    void OnTriggerStay(Collider collider)
    {
        TaillHook_HandsUpDelay_Cross tailhookGestureFind = FindObjectOfType<TaillHook_HandsUpDelay_Cross>();
        TaillHook_HandsUpDelay_Cross tailhookGetComponet = GameObject.Find("Player Head Camera").GetComponent<TaillHook_HandsUpDelay_Cross>();

        omObjectJetFighter jetFighter = FindObjectOfType<omObjectJetFighter>();

        #region collider bool Check > true
        if (collider.gameObject.name == "LeftViveTracker_Hand")
        {
            LeftHand = true;
        }
        if (collider.gameObject.name == "RightViveTracker_Hand")
        {
            RightHand = true;
        }
        #endregion

        switch (base.gestureType)
        {
            case GestureType.HandsUpDelay:
                tailhookGestureFind.gestureType = GestureType.HandsUpDelay;
                omCable cable1 = GameObject.Find("Cable1").GetComponent<omCable>();
                omCable cable2 = GameObject.Find("Cable2").GetComponent<omCable>();

                if (LeftHand == true && RightHand == true)
                {
                    if (press < 100)
                    {
                        omFrameWork.Inst.Dialog.GetWSHud.SetValue(press);
                        StartCoroutine(GaugeCoroutine());
                    }
                    if (press >= 100)
                    {
                        omFrameWork.Inst.Dialog.GetWSHud.CloseProgressBar(true);
                        press = 0;

                        F16_DestroyHook();
                        toQuest.Invoke();

                        // Sound 변경 구간
                        Debug.Log(" ************** Sound Change Test11 ************* ");
                        jetFighter.audioSource[5].Stop();

                        gameObject.GetComponent<BoxCollider>().enabled = false;

                        cable1.cableTrigger = false;
                        cable2.cableTrigger = false;
                        //cable1.lineRenderer.enabled = false;
                        //cable2.lineRenderer.enabled = false;

                        GameObject.Find("Cable1").SetActive(false);
                        GameObject.Find("Cable2").SetActive(false);
                    }
                }
                break;
            case GestureType.Cross:
                tailhookGestureFind.gestureType = GestureType.Cross;
                if (LeftHand == true && RightHand == true)
                {
                    if (press < 100)
                    {
                        omFrameWork.Inst.Dialog.GetWSHud.SetValue(press);
                        StartCoroutine(GaugeCoroutine());
                    }
                    else if (press >= 100)
                    {
                        omFrameWork.Inst.Dialog.GetWSHud.CloseProgressBar(true);
                        press = 0;
                        toQuest.Invoke();

                        // Box Collider
                        gameObject.GetComponent<BoxCollider>().enabled = false;
                    }
                }
                break;
        }
    }
    void OnTriggerExit(Collider collider)
    {
        #region collider bool Check > false
        if (collider.gameObject.name == "LeftViveTracker_Hand")
        {
            LeftHand = false;
        }
        if (collider.gameObject.name == "RightViveTracker_Hand")
        {
            RightHand = false;
        }
        #endregion
    }

    #region Finger Vibrate Set
    // Finger Vibrate + Pressbar On
    void VibrateFingerOn()
    {
        omFrameWork.Inst.Dialog.GetWSHud.SetValue(press);

        omFrameWork.Inst.VR.StartVibrateFingerInTime(FTS.HandType.Left, VibrateFingerType.All, 7, 0.1f);
        omFrameWork.Inst.VR.StartVibrateFingerInTime(FTS.HandType.Right, VibrateFingerType.All, 7, 0.1f);
    }
    // Finger Vibrate + Pressbar Off + Press Gage Reset
    void VibrateFingerOff()
    {
        omFrameWork.Inst.VR.StopVibrateFinger(FTS.HandType.Left, VibrateFingerType.All);
        omFrameWork.Inst.VR.StopVibrateFinger(FTS.HandType.Right, VibrateFingerType.All);

        omFrameWork.Inst.Dialog.GetWSHud.CloseProgressBar(true);
        press = 0;
    }
    #endregion

    #region 다이어로그 관련
    public void Debuging_Dialog()
    {
        // 1~9 숫자키 눌러 다이얼로그 테스트
        if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha1))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > HudBase"));

            //허드 테스트
            //omFrameWork.Inst.Dialog.GetWSHud.StartAllHudInfo();
            //omFrameWork.Inst.Dialog.GetWSHud.SetTitleText(omUIHelper.TestGetScriptTableID());
            //페이드 인아웃
            //omFrameWork.Inst.Dialog.GetWSHud.SetCameraFollow(camera);
            omFrameWork.Inst.Dialog.GetWSHud.FadeOutInUI(1, 1, 1, 1);
            //tts테스트
            //omFrameWork.Inst.Dialog.GetWSHud.SetTitleText(7002, true);
            //omFrameWork.Inst.Dialog.GetWSHud.SetInfoText(7005, true);
            //프로그래스바 테스트
            //omFrameWork.Inst.Dialog.GetWSHud.OpenProgressBar();
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha2))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > Marker"));

            //마커 테스트
            omFrameWork.Inst.Dialog.GetWSMarker.OpenMaker(MarkerViewType.IMAGE, omUIHelper.TestGetSpriteTableID(), Vector3.zero, 200, 200, Quaternion.identity);
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha3))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > HandTouch"));

            //핸드터치 테스트
            omFrameWork.Inst.Dialog.GetWSHandTouch.OpenTouch(omUIHelper.TestGetSpriteTableID(), Vector3.zero, 350, 350, Quaternion.identity, null);
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha4))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > ProgressBar"));

            //오브젝트 프로그래스바 테스트
            omFrameWork.Inst.Dialog.GetWSProgressBar.OpenProgressBar(Vector3.zero, 300, 150, Quaternion.identity, 100);
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha5))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > HudEmoji"));

            //허드 이모지 테스트
            omFrameWork.Inst.Dialog.GetWSHud.OpenInfoAni(HudEmojiSignType.Motion2, 0.5f);
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha6))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > Alpha6"));
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha7))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > Alpha7"));
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha8))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > Alpha8"));
        }
        else if ((Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.Alpha9))
        {
            omLog.LogChannel(eLogChannel.Framework, string.Format("Debuging_Dialog > Alpha9"));
        }
    }
    #endregion
}