using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;
using UnityEngine.EventSystems;
using System.Collections;
using System;

public class UI_MenuBar : BasePanel
{
    [SerializeField]
    private Sprite ExpandSprite, CollapseSprite;
    private Button closeDefaultBtn, toolRoomBtn, siteBtn, workOrderBtn, missionBtn, officeBtn, disassemblyAssemblyWorkOrderBtn, toolKitBtn, notifyBtn;
    public int countDown = 0;

    private int time;

    [Header("묏鱗튿객큐")]
    public string workOrderName;
    [Header("뀔陋묏데객큐")]
    public string disassemblyAssemblyWorkOrderName;
    [Header("교관객큐")]
    public string toolKitName;
    [Header("君끝객큐")]
    public string siteName;
    [Header("곗무杆객큐")]
    public string officeName;
    [Header("묏야쇌객큐")]
    public string toolRoomName;
    [Header("멩列데객큐")]
    public string notifyName;
    /// <summary>
    /// 션쩌돌셕珂돨葵넋
    /// </summary>
    private Coroutine coroutine;
    public void Init()
    {
        //coroutine = GameManager.MonoMgr.StartCoroutine(CountDown(countDown));
        //MenuBarIamge = GetControl<Image>("MenuBar");
        closeDefaultBtn = GetControl<Button>("CloseDefaultBtn");
        toolRoomBtn = GetControl<Button>("ToolRoomBtn");
        siteBtn = GetControl<Button>("SiteBtn");
        workOrderBtn = GetControl<Button>("WorkOrderBtn");
        missionBtn = GetControl<Button>("MissionBtn");
        officeBtn = GetControl<Button>("OfficeBtn");
        toolKitBtn = GetControl<Button>("ToolKitBtn");
        disassemblyAssemblyWorkOrderBtn = GetControl<Button>("DisassemblyAssemblyWorkOrderBtn");
        notifyBtn = GetControl<Button>("NotifyBtn");
    }
    public override void ShowMe()
    {
        GameManager.EventMgr.AddEventListener<E_SceneType>(Enum_EventType.SwitchScene, CheckBtnBySceneName);
        GameManager.EventMgr.AddEventListener<string>(Enum_EventType.SwitchSubProcessStepTriggerID, SwitchSubProcessStepTriggerID);
    }

    private void SwitchSubProcessStepTriggerID(string triggerID)
    {
        if (triggerID == workOrderName)
        {
            GameManager.UIMgr.imageTips.ShowTips(workOrderBtn.GetComponent<RectTransform>());
        }
        else if (triggerID == disassemblyAssemblyWorkOrderName)
        {
            GameManager.UIMgr.imageTips.ShowTips(disassemblyAssemblyWorkOrderBtn.GetComponent<RectTransform>());
        }
        else if (triggerID == toolKitName)
        {
            GameManager.UIMgr.imageTips.ShowTips(toolKitBtn.GetComponent<RectTransform>());
        }
        else if (triggerID == siteName)
        {
            GameManager.UIMgr.imageTips.ShowTips(siteBtn.GetComponent<RectTransform>());
        }
        else if (triggerID == officeName)
        {
            GameManager.UIMgr.imageTips.ShowTips(officeBtn.GetComponent<RectTransform>());
        }
        else if (triggerID == toolRoomName)
        {
            GameManager.UIMgr.imageTips.ShowTips(toolRoomBtn.GetComponent<RectTransform>());
        }
        else if (triggerID == notifyName)
        {
            GameManager.UIMgr.imageTips.ShowTips(notifyBtn.GetComponent<RectTransform>());
        }
        else
        {
            GameManager.UIMgr.imageTips.HideTips();
        }
    }

    public override void HideMe()
    {
        GameManager.EventMgr.RemoveEventListener<E_SceneType>(Enum_EventType.SwitchScene, CheckBtnBySceneName);
        GameManager.EventMgr.RemoveEventListener<string>(Enum_EventType.SwitchSubProcessStepTriggerID, SwitchSubProcessStepTriggerID);
    }
    public void CheckBtnBySceneName(E_SceneType type)
    {
        Debug.Log(type.ToString());
        if (GetControl<Image>("MenuBar").transform.localPosition.x == 960)
        {
            GetControl<Image>("CloseDefaultBtn").sprite = ExpandSprite;
            GetControl<Image>("MenuBar").transform.DOLocalMoveX(1070, 0.5f);
        }
        toolRoomBtn.gameObject.SetActive(type != E_SceneType.ToolRoom);
        siteBtn.gameObject.SetActive(type == E_SceneType.ToolRoom);
        workOrderBtn.gameObject.SetActive(type == E_SceneType.Office);
        missionBtn.gameObject.SetActive(type == E_SceneType.Office || type == E_SceneType.ToolRoom || type == E_SceneType.Site);
        officeBtn.gameObject.SetActive(type == E_SceneType.ToolRoom);
        disassemblyAssemblyWorkOrderBtn.gameObject.SetActive(type == E_SceneType.Office);
        toolKitBtn.gameObject.SetActive(type != E_SceneType.Office);
        notifyBtn.gameObject.SetActive(type == E_SceneType.Site);
    }


    /// <summary>
    /// 돌셕珂
    /// </summary>
    /// <param name="time">돌셕珂뜩씹</param>
    /// <returns></returns>
    private IEnumerator CountDown(int time)
    {
        this.time = time;
        countDown = time;
        WaitForSeconds waitForSeconds = new WaitForSeconds(1);
        while (countDown > 0)
        {
            yield return waitForSeconds;
            GetControl<Image>("MenuBar").transform.DOLocalMoveX(1070, 0.5f);
        }
    }
    protected override void OnClick(string btnName)
    {
        switch (btnName)
        {
            case "CloseDefaultBtn":
                GetControl<Image>("MenuBar").transform.DOLocalMoveX(960, 0.5f);
                GetControl<Image>("CloseDefaultBtn").sprite = CollapseSprite;
                if (GetControl<Image>("MenuBar").transform.localPosition.x == 960)
                {
                    GetControl<Image>("CloseDefaultBtn").sprite = ExpandSprite;
                    GetControl<Image>("MenuBar").transform.DOLocalMoveX(1070, 0.5f);
                }
                break;
            case "OfficeBtn":
                if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(officeName, true) == 0)
                {
                    GameManager.UIMgr.ShowPanel<UI_LoadingPanel>(E_UI_Layer.System, (panel) =>
                    {
                        panel.Init();
                        GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.1f);
                        GameManager.ScenesMgr.LoadSceneAsyn("03_OfficeScene", () =>
                        {
                            GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.9f);
                            GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchScene, GameManager.RunModelMgr.SceneType);

                            GameManager.EventMgr.EventTrigger<string>(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID);

                        });
                    });
                }
                break;
            case "ToolRoomBtn":
                if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(toolRoomName, true) == 0)
                {
                    GameManager.UIMgr.ShowPanel<UI_LoadingPanel>(E_UI_Layer.System, (panel) =>
                {
                    panel.Init();
                    GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.1f);
                    GameManager.ScenesMgr.LoadSceneAsyn("04_ToolMaterialScene", () =>
                    {
                        GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.9f);
                        GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchScene, GameManager.RunModelMgr.SceneType);

                        GameManager.EventMgr.EventTrigger<string>(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID);
                    });
                });
                }
                break;
            case "SiteBtn":
                if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(siteName, true) == 0)
                {
                    GameManager.UIMgr.ShowPanel<UI_LoadingPanel>(E_UI_Layer.System, (panel) =>
                {
                    panel.Init();
                    GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.1f);
                    //털롸
                    ScoreManager.instance.Check(siteName, null);
                    GameManager.ScenesMgr.LoadSceneAsyn("05_LiveScene", () =>
                    {
                        GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.9f);
                        GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchScene, GameManager.RunModelMgr.SceneType);

                        GameManager.EventMgr.EventTrigger<string>(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID);
                    });
                });
                }
                break;
            case "WorkOrderBtn":
                if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(workOrderName, false) == 0)
                {
                    GameManager.UIMgr.ShowPanel<UI_SelectWorkTicketPanel>(E_UI_Layer.Mid, (panel) =>
                    {
                        panel.Init(workOrderName);
                    });
                }
                break;
            case "WorkTicketBtn":

                break;
            case "DisassemblyAssemblyWorkOrderBtn":
                if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(disassemblyAssemblyWorkOrderName, false) == 0)
                {
                    GameManager.UIMgr.ShowPanel<UI_InstallAndDismantleTicketPanel>(E_UI_Layer.Mid, (panel) =>
                {
                    panel.Init(disassemblyAssemblyWorkOrderName);
                });
                }
                break;
            case "ToolKitBtn":
                if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(toolKitName, true) == 0)
                {
                    GameManager.UIMgr.ShowPanel<UI_ToolAndMaterialPanel>(E_UI_Layer.Mid, (p) =>
                {

                });
                }
                break;
            case "NotifyBtn":
                if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(notifyName, false) == 0)
                {
                    GameManager.UIMgr.ShowPanel<UI_DisassemblyAssemblyNoticePanel>(E_UI_Layer.Mid, (p) =>
                    {
                        p.Init(notifyName);
                    });
                }
                break;
            default:
                break;
        }

    }
}