using System.Collections;
using System.Collections.Generic;
using Module.Log;
using UnityEngine;
using UnityEngine.UI;

// 特殊礼包2的控制脚本
// 控制转动数字并停到服务器发来的结果上。
public class GiftBagRandomPanelCtr : MonoBehaviour {

    private static GiftBagRandomPanelCtr _instance;
    public static GiftBagRandomPanelCtr Instance
    {
        get { return _instance; }
    }

    public UIImgText multiple;              // 倍数
    public GameObject randomShowPanel;      // 展示随机 的面板
    public GameObject resultPanel;          // 显示奖品面板
    public RollNum numHeight;               // 随机高位数
    public RollNum numLow;                  // 随机低位数
    public UIContainerBase container;       // 奖品容器
    public Button backMask;                 // 背面遮罩
    private bool isFinish = false;          // 是否结束展示,仅当结束展示后才能关闭界面
    private int rollFinish;

    public delegate void VoidNoneDel();
    public event VoidNoneDel OnDisableEvent;

    public void Awake()
    {
        if (_instance == null)
        {
            _instance = this;

            backMask.onClick.AddListener(Close);
            numHeight.FinishEvent += OnFinish;
            numLow.FinishEvent += OnFinish;
        }
    }

    public void OnFinish()
    {
        ++rollFinish;
        if(rollFinish >= 2)
        {
            isFinish = true;
            StartCoroutine("Switch");
        }
    }

    private void OnEnable()
    {
        isFinish = false;
        rollFinish = 0;
        randomShowPanel.SetActive(false);
        resultPanel.SetActive(false);
    }

    public void Show(object packet)
    {
        SynSpecialGift2Reward info = packet as SynSpecialGift2Reward;
        if (info == null)
        {
            return;
        }

        if(isFinish == false)
        {
            randomShowPanel.SetActive(true);
            resultPanel.SetActive(false);
            StopAllCoroutines();
            multiple.text = info.multiple.ToString();
            StartCoroutine("StarRoll", info.multiple);
            container.InitContentItem(info.info);
        }
    }

    private IEnumerator StarRoll(object n)
    {
        int num = (int)n;
        if(num > 99)
        {
            LogModule.ErrorLog("Can't be lager than 99.");
            yield break;
        }

        int h = num / 10;
        int l = num % 10;

        numHeight.SetAndBegin(h);
        yield return new WaitForSeconds(1.0f);
        numLow.SetAndBegin(l);
    }

    private IEnumerator Switch()
    {
        yield return new WaitForSeconds(1.5f);
        randomShowPanel.SetActive(false);
        resultPanel.SetActive(true);
    }

    private void OnDestroy()
    {
        _instance = null;
    }

    private void Close()
    {
        if(isFinish == true)
        {
            UIManager.CloseUI(UIInfo.GiftBagRandomPanel);
        }
    }

    private void OnDisable()
    {
        if(OnDisableEvent != null)
        {
            OnDisableEvent.Invoke();
        }
    }
}