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;
public enum GestureType
{
    Cross,
    HandsUp,
    HandsUpDelay,
    HookUp_aBit,
    HookUp_Full,
    ComeOn,
    None
}

// 제스쳐 전체적으로 관리하는 스크립트
public class TailHook_Gesture : TailHookQuest
{
    [SerializeField] protected bool bDebugDialog = false;

    public GestureType gestureType;                         // 각 미션의 제스쳐타입 선택

    [Header("플레이어가 대기할 시간")]
    public float waitTime = 1f;                             // 플레이어가 대기하는 시간
    [Header("기다리는 시간 확인")]
    public float checkTime = 0f;                            // 시간 확인

    TailHook_HandsUp_HookUp m_HandsUp_HookUp;
    TaillHook_HandsUpDelay_Cross m_HookUpDelay_Cross;

    public bool m_isEnter = false;
    public bool check = true;

    public omNetObject netObj;
    override public void Init()
    {
        base.Init();

        netObj = FindObjectOfType<omNetObject>();
        //netObj.StartSendNetworkSync();
    }
    // 해당 제스쳐에 따라 스크립트가 켜지고 꺼짐.
    override public void OnQuestEnter()
    {
        netQuest = GetComponent<TailHook_NetQuest>();

        QuestGestureType();

        base.OnQuestEnter();
        m_isEnter = true;

    }
    protected void Update()
    {
        if (m_isEnter && check)
        {
            checkTime += Time.deltaTime;
            if (checkTime >= waitTime)
            {
                if (netQuest != null)
                {
                    netQuest.SendQuest();
                }
            }
        }

        if (bDebugDialog)
            Debuging_Dialog();
    }
    void QuestGestureType()
    {
        TailHook_HandsUp_HookUp TailHook_HandsUp_HookUp = FindObjectOfType<TailHook_HandsUp_HookUp>();
        TaillHook_HandsUpDelay_Cross TailHook_HansUpDelay_Cross = FindObjectOfType<TaillHook_HandsUpDelay_Cross>();

        netObj.StartSendNetworkSync();

        switch (gestureType)
        {
            case GestureType.HandsUp:
                //Pannel23True();
                HandUpHookUpGetComponent();
                TailHook_HandsUp_HookUp.enabled = true;
                TailHook_HansUpDelay_Cross.enabled = false;

                omFrameWork.Inst.Dialog.GetWSHud.OpenInfoAniInTime(HudEmojiSignType.Motion2, 1f, 20f);
                TailHook_HandsUp_HookUp.gestureType = GestureType.HandsUp;
                TailHook_HansUpDelay_Cross.gestureType = GestureType.None;

                break;

            case GestureType.HookUp_aBit:
                HandUpHookUpGetComponent();
                TailHook_HandsUp_HookUp.enabled = true;
                TailHook_HansUpDelay_Cross.enabled = false;

                omFrameWork.Inst.Dialog.GetWSHud.OpenInfoAniInTime(HudEmojiSignType.Motion4, 1f, 20f);
                TailHook_HandsUp_HookUp.gestureType = GestureType.HookUp_aBit;
                TailHook_HansUpDelay_Cross.gestureType = GestureType.None;

                break;

            case GestureType.HookUp_Full:
                HandUpHookUpGetComponent();
                TailHook_HandsUp_HookUp.enabled = true;
                TailHook_HansUpDelay_Cross.enabled = false;

                omFrameWork.Inst.Dialog.GetWSHud.OpenInfoAniInTime(HudEmojiSignType.Motion4, 1f, 20f);
                TailHook_HandsUp_HookUp.gestureType = GestureType.HookUp_Full;
                TailHook_HansUpDelay_Cross.gestureType = GestureType.None;

                break;

            case GestureType.ComeOn:
                //Pannel23True();
                HandUpHookUpGetComponent();
                TailHook_HandsUp_HookUp.enabled = true;
                TailHook_HansUpDelay_Cross.enabled = false;

                omFrameWork.Inst.Dialog.GetWSHud.OpenInfoAniInTime(HudEmojiSignType.Motion5, 1f, 20f);
                TailHook_HandsUp_HookUp.movebool = true;

                TailHook_HandsUp_HookUp.gestureType = GestureType.ComeOn;
                TailHook_HansUpDelay_Cross.gestureType = GestureType.None;

                break;

            case GestureType.Cross:
                DelayGetComponent();
                TailHook_HandsUp_HookUp.enabled = false;
                TailHook_HansUpDelay_Cross.enabled = true;

                omFrameWork.Inst.Dialog.GetWSHud.OpenInfoAniInTime(HudEmojiSignType.Motion1, 1f, 20f);
                TailHook_HandsUp_HookUp.gestureType = GestureType.None;
                TailHook_HansUpDelay_Cross.gestureType = GestureType.Cross;

                break;

            case GestureType.HandsUpDelay:
                //Pannel23True();
                DelayGetComponent();
                TailHook_HandsUp_HookUp.enabled = false;
                TailHook_HansUpDelay_Cross.enabled = true;

                omFrameWork.Inst.Dialog.GetWSHud.OpenInfoAniInTime(HudEmojiSignType.Motion3, 1f, 20f);
                TailHook_HansUpDelay_Cross.BackMovebool = true;

                TailHook_HandsUp_HookUp.gestureType = GestureType.None;
                TailHook_HansUpDelay_Cross.gestureType = GestureType.HandsUpDelay;

                break;
        }
    }
    void HandUpHookUpGetComponent()
    {
        m_HandsUp_HookUp = GameObject.Find("Player Head Camera").GetComponent<TailHook_HandsUp_HookUp>();
    }
    void DelayGetComponent()
    {
        m_HookUpDelay_Cross = GameObject.Find("Player Head Camera").GetComponent<TaillHook_HandsUpDelay_Cross>();
    }
    void VibrateFingerOff()
    {
        omFrameWork.Inst.VR.StopVibrateFinger(FTS.HandType.Left, VibrateFingerType.All);
        omFrameWork.Inst.VR.StopVibrateFinger(FTS.HandType.Right, VibrateFingerType.All);
    }

    public void callBack()
    {
        //m_callBack();
    }

    override public void OnQuestExit()
    {
        base.OnQuestExit();
        m_isEnter = false;
        check = false;

        VibrateFingerOff();
        omFrameWork.Inst.Dialog.GetWSHud.CloseInfoAni();

    }

    #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
}

TailHook_Wait

TailHook_Touch

TaillHook_HandsUpDelay_Cross

TailHook_HandsUp_HookUp