using UI.CommonGame;
using System.Collections.Generic;
using FairyGUI;
using System;
namespace GFGGame
{
    /// 
    /// 获取途径
    /// 
    public class ApproachOfItemView : BaseWindow
    {
        private UI_ApproachOfItemUI _ui;
        private List _approachDatas;
        private int _itemId;
        private object[] _fromeViewDatas;
        protected override void OnInit()
        {
            base.OnInit();
            _ui = UI_ApproachOfItemUI.Create();
            this.viewCom = _ui.target;
            this.viewCom.Center();
            this.modal = true;
            viewAnimationType = EnumViewAnimationType.ZOOM_CENTER;
            _ui.m_listApproach.itemRenderer = ListApproachItemRenderer;
            _ui.m_listApproach.onClickItem.Add(OnClickListApproachItem);
        }
        protected override void OnShown()
        {
            base.OnShown();
            object[] temp = viewData as object[];
            _itemId = (int)temp[0];
            _fromeViewDatas = temp[1] as object[];
            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId);
            _ui.m_txtName.text = itemCfg.name;
            _ui.m_listApproach.RemoveChildrenToPool();
            if (itemCfg.approach.Length > 0)
            {
                _ui.m_txtNone.visible = false;
                string[] approachStrs = itemCfg.approach.Split(';');
                _approachDatas = new List();
                foreach (string approachStr in approachStrs)
                {
                    if (approachStr.Length > 0)
                    {
                        string[] infos = approachStr.Split('=');
                        _approachDatas.Add(infos);
                    }
                }
                _ui.m_listApproach.numItems = _approachDatas.Count;
                // _ui.m_listApproach.ResizeToFit();
            }
            else
            {
                _ui.m_txtNone.visible = true;
                // _ui.m_listApproach.height = 162;
            }
            Timers.inst.AddUpdate(CheckGuide);
        }
        protected override void OnHide()
        {
            base.OnHide();
            _fromeViewDatas = null;
            Timers.inst.Remove(CheckGuide);
        }
        private void ListApproachItemRenderer(int index, GObject item)
        {
            UI_ButtonApproach listItem = UI_ButtonApproach.Proxy(item);
            string[] infos = _approachDatas[index];
            string functionId = infos[0];
            GameFunctionCfg gameFunctionCfg = GameFunctionCfgArray.Instance.GetCfg(functionId);
            if (functionId == ConstFunctionId.JU_QING_GUAN_QIA)
            {
                string value = infos[1];
                var levelCfgId = int.Parse(value);
                var levelCfg = StoryLevelCfgArray.Instance.GetCfg(levelCfgId);
                if (levelCfg.type == ConstInstanceZonesType.Story)
                {
                    var chapterCfg = StoryChapterCfgArray.Instance.GetCfg(levelCfg.chapterId);
                    string chapter = NumberUtil.GetChiniseNumberText(chapterCfg.order);
                    string level = NumberUtil.GetChiniseNumberText(levelCfg.order);
                    if (levelCfg.subType == ConstInstanceZonesSubType.Normal)
                    {
                        listItem.target.text = string.Format(gameFunctionCfg.name, chapter, level);
                    }
                    else if (levelCfg.subType == ConstInstanceZonesSubType.Hard)
                    {
                        listItem.target.text = string.Format("精英" + gameFunctionCfg.name, chapter, level);
                    }
                }
                else if (levelCfg.type == ConstInstanceZonesType.Studio)
                {
                    var studioCfg = StudioCfgArray.Instance.GetCfg(levelCfg.chapterId);
                    listItem.target.text = levelCfg.name;
                }
            }
            else if (functionId == ConstFunctionId.FU_ZHUANG_DIAN)
            {
                int shopId = int.Parse(infos[1]);
                if (shopId == ConstStoreId.LUCKY_BOX_ACTIVITY_STORE_ID)
                {
                    listItem.target.text = "活动商店";
                }
                else if (shopId == ConstStoreId.LUCKY_BOX_STORE_ID)
                {
                    listItem.target.text = "落星商店";
                }
                else
                {
                    listItem.target.text = "服装店";
                }
            }
            else
            {
                listItem.target.text = gameFunctionCfg.name;
            }
            listItem.target.data = infos;
            UI_ButtonApproach.ProxyEnd();
        }
        private void OnClickListApproachItem(EventContext context)
        {
            GObject listItem = context.data as GObject;
            string[] infos = listItem.data as string[];
            string functionId = infos[0];
            bool isJump = true;
            switch (functionId)
            {
                case ConstFunctionId.FU_ZHUANG_DIAN:
                    this.Hide();
                    object[] temp = viewData as object[];
                    int count = temp.Length > 2 ? (int)temp[2] : 0;
                    int shopId = int.Parse(infos[1]);
                    if (shopId == ConstStoreId.LUCKY_BOX_ACTIVITY_STORE_ID)
                    {
                        PromptController.Instance.ShowFloatTextPrompt("活动暂未开启");
                        break;
                    }
                    isJump = ViewManager.Show(ViewName.CLOTHING_SHOP_VIEW, new object[] { shopId, null, _itemId, count }, _fromeViewDatas, true, true);
                    break;
                case ConstFunctionId.FU_ZHUANG_DECOMPOSE:
                    this.Hide();
                    isJump = ViewManager.Show(null, _fromeViewDatas);
                    break;
                case ConstFunctionId.SHOP_GIFT_BAG:
                    this.Hide();
                    int giftBagValue = int.Parse(infos[1]);
                    isJump = ViewManager.Show(giftBagValue, _fromeViewDatas);
                    break;
                case ConstFunctionId.SHOP_EXCHANGE:
                    this.Hide();
                    int exchangeValue = int.Parse(infos[1]);
                    isJump = ViewManager.Show(exchangeValue, _fromeViewDatas);
                    break;
                case ConstFunctionId.JU_QING_GUAN_QIA:
                    string value = infos[1];
                    var levelCfgId = int.Parse(value);
                    var levelCfg = StoryLevelCfgArray.Instance.GetCfg(levelCfgId);
                    isJump = false;
                    if (levelCfg.type == ConstInstanceZonesType.Story)
                    {
                        if (!FunctionOpenDataManager.Instance.CheckIsFunOpenById(ViewName.STORY_CHAPTER_VIEW))
                        {
                            break;
                        }
                        if (!MainStoryDataManager.CheckLevelUnlock(levelCfgId))
                        {
                            PromptController.Instance.ShowFloatTextPrompt("关卡未开启");
                            break;
                        }
                        if ((string)_fromeViewDatas[0] == ViewName.DRESS_UP_FIGHT_VIEW)
                        {
                            //从战斗换装必需品来源跳转到剧情界面,在剧情界面点返回后直接返回章节界面,无需返回换装界面
                            _fromeViewDatas = null;
                        }
                        isJump = ViewManager.Show(ViewName.STORY_CHAPTER_VIEW, levelCfg.chapterId, _fromeViewDatas, true);
                        InstanceZonesController.ShowLevelView(levelCfgId, StudioDataManager.Instance.OnFinishStoryLevel);
                    }
                    else if (levelCfg.type == ConstInstanceZonesType.Studio)
                    {
                        StudioCfg studioCfg = StudioCfgArray.Instance.GetCfg(levelCfg.chapterId);
                        if (!FunctionOpenDataManager.Instance.CheckIsFunOpenById(studioCfg.funId))
                        {
                            break;
                        }
                        //TO DO
                        List storyLevelCfgs = StoryLevelCfgArray.Instance.GetCfgsBytypeAndsubTypeAndchapterId(studioCfg.type, studioCfg.subType, studioCfg.id);
                        StudioDataManager.Instance.IsCanFight(levelCfg.id, out bool canFight, out string content);
                        if (!canFight)
                        {
                            PromptController.Instance.ShowFloatTextPrompt("关卡未开启");
                            break;
                        }
                        this.Hide();
                        if (!TimeUtil.CheckDayOfWeek(studioCfg.timeArr))
                        {
                            PromptController.Instance.ShowFloatTextPrompt("不在活动周期内");
                            break;
                        }
                        int type = studioCfg.funId == typeof(StudioPropertyView).Name ? 1 : 0;
                        StudioDataManager.Instance.TYPE_SELECT_INDEX = type;
                        StudioDataManager.Instance.PROPERTY_SELECT_INDEX = 0;
                        if (studioCfg.funId == typeof(StudioPropertyView).Name)
                        {
                            List studioCfgs = StudioCfgArray.Instance.GetCfgsByfunId(typeof(StudioPropertyView).Name);
                            for (int i = 0; i < studioCfgs.Count; i++)
                            {
                                if (studioCfgs[i].id == studioCfg.id)
                                {
                                    StudioDataManager.Instance.PROPERTY_SELECT_INDEX = i;
                                    break;
                                }
                            }
                        }
                        string viewName = "GFGGame." + studioCfg.funId;
                        ViewManager.Show(viewName, new object[] { type, 0 }, _fromeViewDatas);
                        StudioDataManager.Instance.VIEW_NAME = viewName;
                        InstanceZonesController.ShowLevelView(levelCfgId, StudioDataManager.Instance.OnFinishStoryLevel);
                        isJump = true;
                        break;
                    }
                    isJump = true;
                    StoryController.ShowLevelView(levelCfgId);
                    // StoryController.ShowLevelView(levelCfgId);
                    break;
                case ConstFunctionId.FU_ZHUANG_HE_CHENG:
                    isJump = false;
                    int suitId = SuitCfgManager.Instance.GetItemSuitId(_itemId);
                    if (suitId > 0)
                    {
                        this.Hide();
                        isJump = ViewManager.Show(ViewName.CLOTHING_SYNTHETIC_VIEW, new object[] { suitId, _itemId }, _fromeViewDatas);
                    }
                    break;
                case ConstFunctionId.ZHAI_XING:
                    this.Hide();
                    isJump = ViewManager.Show(ViewName.LUCKY_BOX_VIEW, null, _fromeViewDatas, true);
                    break;
                case ConstFunctionId.TAO_ZHUANG_TU_JIAN:
                    isJump = false;
                    if (ViewManager.isViewOpen(ViewName.SUIT_GUIDE_VIEW))
                    {
                        this.Hide();
                        return;
                    }
                    this.Hide();
                    isJump = ViewManager.Show(ViewName.SUIT_GUIDE_VIEW, null, _fromeViewDatas);
                    break;
                case ConstFunctionId.TAO_ZHUANG_HE_CHENG:
                    this.Hide();
                    isJump = ViewManager.Show(ViewName.SUIT_SYNTHETIC_LIST_VIEW);
                    break;
                case ConstFunctionId.SUIT_FOSTER:
                    this.Hide();
                    isJump = ViewManager.Show(null, _fromeViewDatas);
                    break;
            }
            if (isJump)
            {
                EventAgent.DispatchEvent(ConstMessage.JUMP_TO_SOURCE);
            }
        }
        private void CheckGuide(object param)
        {
            if (GuideDataManager.IsGuideFinish(ConstGuideId.BUY_CLOTHING) <= 0)
            {
                UpdateToCheckGuide(null);
            }
            else
            {
                Timers.inst.Remove(CheckGuide);
            }
        }
        protected override void UpdateToCheckGuide(object param)
        {
            if (!ViewManager.CheckIsTopView(this.viewCom)) return;
            if (_approachDatas == null) return;
            int index = 0;
            for (int i = 0; i < _approachDatas.Count; i++)
            {
                if (_approachDatas[i][0] == ConstFunctionId.FU_ZHUANG_DIAN)
                {
                    index = i;
                    break;
                }
            }
            GuideController.TryGuide(_ui.m_listApproach, ConstGuideId.BUY_CLOTHING, 4, "该物品可以在服装店购买,点开服装店看看。", index, true, (int)(this.viewCom.y + this.viewCom.height + 10));
        }
    }
}