using UnityEngine;
using UnityEngine.SceneManagement;
using static CommunicationEvents;
using static UIconfig;
using System.Collections;
//using static CamControl_1;

public class HideUI : MonoBehaviour
{

    //public KeyCode Key = KeyCode.F1;
    //public KeyCode ScreenshotKey = KeyCode.F12;

    public string
        modifier,
        modundo,
        modredo,
        modreset,
        modsave,
        modload;
    public string cancel_keyBind;
    public string MathM_keyBind;
    public float waitingBetweenInputs = 0.2f;
    private double numinputtrigger = 0;


    public UnityStandardAssets.Characters.FirstPerson.FirstPersonController CamControl_StdAsset;
    public Characters.FirstPerson.FirstPersonController1 CamControl_ScriptChar;


    public bool LockOnly = true;
    public MeshRenderer CursorRenderer;
    //for Debug:
    //public MeshRenderer CursorRenderer_FirstP; 
    //public MeshRenderer CursorRenderer_FirstP_oldInpOrig;
    //public int whichCursor;

    private ControlMapping input_ControlMapping;

    internal Canvas UICanvas;

    private void Awake()
    {
        //New InputSystem
        input_ControlMapping = new ControlMapping();
        input_ControlMapping.Actionmap1.Cancel.Enable();
        input_ControlMapping.Actionmap1.ToolMode.Enable();
        input_ControlMapping.Actionmap1.MathMode.Enable();
        input_ControlMapping.Actionmap1.Modifier.Enable();
        input_ControlMapping.Actionmap1.Load.Enable();
        input_ControlMapping.Actionmap1.Save.Enable();
        input_ControlMapping.Actionmap1.Reset.Enable();
        input_ControlMapping.Actionmap1.Undo.Enable();
        input_ControlMapping.Actionmap1.Redo.Enable();

    }
    private void OnEnable()
    {
        input_ControlMapping.Actionmap1.Cancel.Enable();
        input_ControlMapping.Actionmap1.ToolMode.Enable();
        input_ControlMapping.Actionmap1.MathMode.Enable();
        input_ControlMapping.Actionmap1.Modifier.Enable();
        input_ControlMapping.Actionmap1.Load.Enable();
        input_ControlMapping.Actionmap1.Save.Enable();
        input_ControlMapping.Actionmap1.Reset.Enable();
        input_ControlMapping.Actionmap1.Undo.Enable();
        input_ControlMapping.Actionmap1.Redo.Enable();
    }

    private void OnDisable()
    {
        input_ControlMapping.Actionmap1.Cancel.Disable();
        input_ControlMapping.Actionmap1.ToolMode.Disable();
        input_ControlMapping.Actionmap1.MathMode.Disable();
        input_ControlMapping.Actionmap1.Modifier.Enable();
        input_ControlMapping.Actionmap1.Load.Disable();
        input_ControlMapping.Actionmap1.Save.Disable();
        input_ControlMapping.Actionmap1.Reset.Disable();
        input_ControlMapping.Actionmap1.Undo.Disable();
        input_ControlMapping.Actionmap1.Redo.Disable();
    }


    void Start()
    {
        if (UIconfig.FrameITUIversion == 1) // 1= FrameITUI; 2= FrameITUI_mobil
        {
            Start2();
            //Cursor.lockState = CursorLockMode.Confined;
        }
        else
        {
            if (UICanvas == null)
            {
                UICanvas = GetComponentInChildren<Canvas>();
            }
            UICanvas.enabled = false;
        }

    }
    void Start2()
    {

        if (!LockOnly)
        {
            if (UICanvas == null)
            {
                UICanvas = GetComponentInChildren<Canvas>();
            }
            bool camActive;
            camActive = !UICanvas.enabled;
            //camActive = false;
            SetCamControl123(camActive);
            SetCursorRenderer123(camActive);
        }

    }
    void Start3()
    {
        print("Start3");
        /*
        UIconfig.CanvasOnOff_Array[14] = 1;
        UIconfig.CanvasOnOff_Array[20] = 0;
        //setUI_Vis_walk(0);
        //UIconfig.CanvasOnOff_Array[20] = 0;
        */
        Update();
        /*
        //CheckUI_Vis_walk();
        UIconfig.CanvasOnOff_Array[14] = 0;
        UIconfig.CanvasOnOff_Array[20] = 1;
        UIconfig.CanvasOnOff_Array[10] = 1;

        UIconfig.CanvasOnOff_Array[3] = 1;
        */
        SetCamControl123(false);

        
       


    }

    // Update is called once per frame
    void Update()
    {

        if (UIconfig.FrameITUIversion == 1)
        {
            Update3();
        }
    }
    void Update3()
    {
        //CheckUI_Vis_walk();
        CheckIf();

        
        Update2();
        
        CheckUI_Vis();

    }

    IEnumerator slowInput()
    {

        yield return new WaitForSecondsRealtime(waitingBetweenInputs);

        numinputtrigger = 0;


        yield return null;

    }
    void CheckIf()
    {

        if (UIconfig.InputManagerVersion == 1)
        {
            if (Input.GetButtonDown(cancel_keyBind))
            {

                UIconfig.CanvasOnOff_Array[02] = 1;
                //UIconfig.CanvasOnOff_Array[10] = 0;
                
                return;
            }
            
            if (Input.GetButtonDown(MathM_keyBind))
            {
                if (LockOnly)
                {
                    CamControl_StdAsset.enabled = !CamControl_StdAsset.enabled;
                    SetCursorRenderer123(CamControl_StdAsset.enabled);
                    SetCamControl123(CamControl_StdAsset.enabled);

                }
                else
                {
                    Cursor.visible = !UICanvas.enabled;
                    SetCamControl123(UICanvas.enabled);

                    SetCursorRenderer123(UICanvas.enabled);

                    UICanvas.enabled = !UICanvas.enabled;
                }

            }
        }


        if (UIconfig.InputManagerVersion == 2 && numinputtrigger == 0)
        {
            if (input_ControlMapping.Actionmap1.Cancel.ReadValue<float>() != 0)
            {
                numinputtrigger++;
                StartCoroutine(slowInput());

                UIconfig.CanvasOnOff_Array[02] = 1;
                //UIconfig.CanvasOnOff_Array[10] = 0;
                return;
            }

            if (input_ControlMapping.Actionmap1.MathMode.ReadValue<float>() != 0)
            {
                numinputtrigger++;
                StartCoroutine(slowInput());

                if (LockOnly)
                {
                    CamControl_StdAsset.enabled = !CamControl_StdAsset.enabled;
                    SetCursorRenderer123(CamControl_StdAsset.enabled);
                    SetCamControl123(CamControl_StdAsset.enabled);

                }
                else
                {
                    Cursor.visible = !UICanvas.enabled;
                    SetCamControl123(UICanvas.enabled);

                    SetCursorRenderer123(UICanvas.enabled);

                    UICanvas.enabled = !UICanvas.enabled;
                }

            }
        }


       
        


    }


    void CheckUI_Vis()
    {
        GadgetCanBeUsed = true;
    }



    void Update2() {
        if (UIconfig.InputManagerVersion == 1)
        {
            if (Input.GetButton(modifier))
            {
                if (Input.GetButtonDown(modundo))
                    StageStatic.stage.factState.undo();
                else if (Input.GetButtonDown(modredo))
                    StageStatic.stage.factState.redo();
                else if (Input.GetButtonDown(modreset))
                    StageStatic.stage.factState.softreset();
                else if (Input.GetButtonDown(modsave))
                    StageStatic.stage.push_record();
                else if (Input.GetButtonDown(modload))
                {
                    StageStatic.stage.factState.hardreset();
                    StageStatic.LoadInitStage(StageStatic.stage.name, !StageStatic.stage.use_install_folder);
                }
            }
        }
        if (UIconfig.InputManagerVersion == 2)
        {
            if (input_ControlMapping.Actionmap1.Modifier.ReadValue<float>() != 0)
            {
                if (input_ControlMapping.Actionmap1.Undo.ReadValue<float>() != 0 && numinputtrigger == 0)
                {
                    StageStatic.stage.factState.undo();
                    numinputtrigger++;
                    StartCoroutine(slowInput());
                }
                else if (input_ControlMapping.Actionmap1.Redo.ReadValue<float>() != 0 && numinputtrigger == 0)
                {
                    StageStatic.stage.factState.redo();
                    numinputtrigger++;
                    StartCoroutine(slowInput());
                }
                else if (input_ControlMapping.Actionmap1.Reset.ReadValue<float>() != 0 && numinputtrigger == 0) 
                {
                    StageStatic.stage.factState.softreset();
                    numinputtrigger++;
                    StartCoroutine(slowInput());
                }
                else if (input_ControlMapping.Actionmap1.Save.ReadValue<float>() != 0 && numinputtrigger < 10)
                {
                    StageStatic.stage.push_record();
                    numinputtrigger = numinputtrigger + 10;
                    StartCoroutine(slowInput());
                }
                else if (input_ControlMapping.Actionmap1.Load.ReadValue<float>() != 0 && numinputtrigger == 0)
                {
                    StageStatic.stage.factState.hardreset();
                    StageStatic.LoadInitStage(StageStatic.stage.name, !StageStatic.stage.use_install_folder);
                    numinputtrigger++;
                    StartCoroutine(slowInput());
                }
            }
        }

        /*
        //Todo before capturing: Make directories "UFrameIT-Screenshots/Unity_ScreenCapture" in project folder
        else if (Input.GetKeyDown(ScreenshotKey)) {
            ScreenCapture.CaptureScreenshot("UFrameIT-Screenshots\\Unity_ScreenCapture\\Capture.png");
        }
        */
    }

    private void SetCursorRenderer123(bool opt)
    {
        CursorRenderer.enabled = opt;

        //multiple Cursor result in conflicts
        /*
        switch (whichCursor)
        //switch (UIconfig.GameplayMode)
        {
            case 0:
                CursorRenderer_FirstP_oldInpOrig.enabled = opt;
                break;

            case 5:
                CursorRenderer_FirstP.enabled = opt;
                break;
            case 6:
                CursorRenderer_FirstP_oldInpOrig.enabled = opt;
                break;
            default:
                CursorRenderer_FirstP.enabled = opt;
                break;
                
        }
        */
    }
    private void SetCamControl123(bool opt)
    {
        CamControl_StdAsset.enabled = opt;
        CamControl_ScriptChar.enabled = opt;
    }
}