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

public class WelfareCommonRewItemInfo
{
    public int _ItemId;
    public int _ItemCount;
    public WelfareCommonRewItemInfo(int _ItemId, int _ItemCount)
    {
        this._ItemId = _ItemId;
        this._ItemCount = _ItemCount;
    }
}

// 福利大厅
public class WelfareRootCtr : MonoBehaviour
{

    #region static

    public static void ShowWelfarePage(string pageStr)
    {
        int pageIdx = int.Parse(pageStr);
        UIManager.ShowUI(UIInfo.WelfareRoot,
                (bool bSuccess, object param) =>
                {
                    if (bSuccess)
                    {
                        PopOffLineExp info = param as PopOffLineExp;
                        if (info != null)
                        {
                            WelfareRootCtr.Instance.OpenWith(pageIdx);
                        }
                    }
                });
    }

    #endregion

    public static WelfareRootCtr Instance;
    private void Awake()
    {
        Instance = this;
    }

    private void OnDestroy()
    {
        Instance = null;
        LuaUIManager.Instance.OnDestroyCallBack(luaUINameList);
    }

    private void OnEnable()
    {
        ReqWelfareInfo();
    }

    public void ReqWelfareInfo()
    {
        WelfareInfoReq req = new WelfareInfoReq();
        req.flag = -1;
        req.SendMsg();
    }

    public void OnWelfareInfoRet(WelfareInfoRet packet)
    {
        InitMenuItem(packet._ActInfo);
    }

    public enum WlfareRewardState
    {
        Invalid = -1,
        None = 0, //没有奖励可以领取
        CanGet = 1, //可以领取但是没有领取
        HasGeted = 2, //已经领取 没有状态了
        CanReCheck = 3, //可以补签
        CanGetAgain = 4,//充值可再次领取
    }

    #region
    public UIContainerSelect _MenuItemSelectContainer;
    public GameObject _PageContainer;
    private bool isTryShowAppointedAct = false;                 // 以指定打开特定的UI
    #endregion
    public void InitMenuItem(List<WelfareMenuItemInfo> _MneuItemList)
    {
        if(_MneuItemList.Count  <= 0)
        {
            LogModule.ErrorLog("_MneuItemList COUNT IS NULL");
            return;
        }

        if (_CurSelectedNodeId == -1)
        {
            _MenuItemSelectContainer.InitSelectContent(_MneuItemList, new List<WelfareMenuItemInfo> { _MneuItemList[0] }, OnWelfareMenuItemClick);
        }
        else
        {
            bool _IsFind = false;
            for(int index = 0; index < _MneuItemList.Count; index++)
            {
                if(_MneuItemList[index]._NodeId == _CurSelectedNodeId)
                {
                    _IsFind = true;
                    _MenuItemSelectContainer.InitSelectContent(_MneuItemList, new List<WelfareMenuItemInfo> { _MneuItemList[index] }, OnWelfareMenuItemClick);
                    break;
                }
            }

            if(!_IsFind)
            {
                _MenuItemSelectContainer.InitSelectContent(_MneuItemList, new List<WelfareMenuItemInfo> { _MneuItemList[0] }, OnWelfareMenuItemClick);
                if(isTryShowAppointedAct == true)
                {
                    GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6741}"));
                } 
            }
        }

        isTryShowAppointedAct = false;
    }

    public void OnWelfareMenuItemClick(object param)
    {
        WelfareMenuItemInfo menuItemInfo = param as WelfareMenuItemInfo;
        LogModule.DebugLog("ID: " + menuItemInfo._NodeId);
        ShowPageByNodeId(menuItemInfo._NodeId);
    }

    [HideInInspector]
    public Dictionary<int, GameObject> _PageDic = new Dictionary<int, GameObject>();
    private int _CurSelectedNodeId = -1;
    public void ShowPageByNodeId(int _NodeId)
    {
        List<KeyValuePair<int, GameObject>> _pageDicList = new List<KeyValuePair<int, GameObject>>(_PageDic);
        for(int index = 0; index < _pageDicList.Count; index++)
        {
            if(_pageDicList[index].Value)
                _pageDicList[index].Value.SetActive(_pageDicList[index].Key == _NodeId);
        }

        _CurSelectedNodeId = _NodeId;

        if (_PageDic.ContainsKey(_CurSelectedNodeId) && _PageDic[_CurSelectedNodeId] != null)
        {
            _PageDic[_CurSelectedNodeId].SetActive(true);
            ReqNodePageInfo(_CurSelectedNodeId);
        }
        else
        {
            StartCoroutine(ShowPageAsyc(_CurSelectedNodeId));
        }
    }


    private List<string> luaUINameList = new List<string>();
    IEnumerator ShowPageAsyc(int _NodeId)
    {
        yield return new WaitForEndOfFrame();

        Tab_ActInfoClient actInfoClient = TableManager.GetActInfoClientByID(_NodeId, 0);
        if (actInfoClient == null)
        {
            LogModule.ErrorLog("Can't find nodeId in ActInfoClient : " + _NodeId);
            yield break;
        }

        Hashtable hash = new Hashtable();
        hash.Add("NodeId", _NodeId);
        if (!luaUINameList.Contains(actInfoClient.UIPath))
            luaUINameList.Add(actInfoClient.UIPath);
        LuaUIManager.Instance.ShowLuaUIAsChild(actInfoClient.UIPath, _PageContainer, LoadNodepageUICallBack, hash, true);

        yield break;
    }

    public void ReqNodePageInfo(int _NodeId)
    {
        ReqNodePageInfo req = new ReqNodePageInfo();
        req._NodeId = _NodeId;
        req.SendMsg();
    }

    public void LoadNodepageUICallBack(bool sucess, object param, GameObject uiObj)
    {
        Hashtable hash = (Hashtable)param;
        var _NodeId = -1;
        if(hash.ContainsKey("NodeId"))
        {
            _NodeId = (int)hash["NodeId"];
        }

        if(_NodeId == -1)
        {
            return;
        }

        if(uiObj != null)
        {
            var pageBase = uiObj.GetComponent<WelfarePageBaseCS>();
            if(pageBase != null)
            {
                pageBase._NodeId = _NodeId;
            }
        }

        if(_PageDic.ContainsKey(_NodeId) && _PageDic[_NodeId])
        {
            if(_PageDic[_NodeId].activeInHierarchy)
            {
                _PageDic[_NodeId].SetActive(false);
            }
            _PageDic[_NodeId] = uiObj;
        }
        else
        {
            if(_PageDic.ContainsKey(_NodeId))
            {
                _PageDic[_NodeId] = uiObj;
            }
            else
            {
                _PageDic.Add(_NodeId, uiObj);
            }


           
        }

        uiObj.SetActive(true);
        ReqNodePageInfo(_NodeId);
    }
    
    public void ClearShowWin(int _NodeId)
    {
        if(_PageDic.ContainsKey(_NodeId))
        {
            if (_PageDic[_NodeId] != null)
            {
                _PageDic[_NodeId].SetActive(false);
            }
            _PageDic.Remove(_NodeId);
        }
    }

    public void OnCloseBtnClick()
    {
        UIManager.CloseUI(UIInfo.WelfareRoot);
    }
    public void OnDisable()
    {
        _CurSelectedNodeId = -1;
    }

    /// <summary>
    /// 指定以某个界面显示福利大厅
    /// </summary>
    /// <param name="nodeID">
    /// SevenDay = 200,
    /// EveryDay = 201,
    /// OnLine = 202,
    /// LevelPacket = 203,
    /// MonthlyCard = 204
    /// </param>
    public void OpenWith(int nodeID)
    {
        isTryShowAppointedAct = true;
        _CurSelectedNodeId = nodeID;
    }
}