using System.Collections;
using UnityEngine;
using UI.ActivityAFuGift;
using ET;
using FairyGUI;
using System;
using UI.CommonGame;
using static GFGGame.ShopSProxy;
using System.Threading.Tasks;
namespace GFGGame
{
    public class ActivityAfuGiftView : BaseWindow
    {
        private UI_ActivityAFuGiftUI _ui;
        private GList _rewardListUI;
        private struct GetState
        {
            public int rewardID;
            public bool canGet;
            public bool isVip;
        }
        public override void Dispose()
        {
            base.Dispose();
        }
        protected override void OnInit()
        {
            base.OnInit();
            packageName = UI_ActivityAFuGiftUI.PACKAGE_NAME;
            _ui = UI_ActivityAFuGiftUI.Create();
            viewCom = _ui.target;
            viewCom.Center();
            modal = true;
            viewAnimationType = EnumViewAnimationType.ZOOM_CENTER;
            _ui.m_btnClose.onClick.Add(Hide);
            _ui.m_btnGet.onClick.Add(OnClickBtnGet);
            // Data
            ActivityAfuGiftDataManager.Instance.InitActivityInfo();
            // UI
            _rewardListUI = _ui.m_panel.m_scrollPane.m_list;
            _rewardListUI.itemRenderer = RenderListReward;
            _rewardListUI.numItems = ActivityAfuGiftDataManager.Instance.RewardCfgs.Count;
            InitUI();
        }
        protected override void OnShown()
        {
            base.OnShown();
            if (ActivityAfuGiftDataManager.Instance.NeedRefresh)
            {
                InitUI();
                ActivityAfuGiftDataManager.Instance.NeedRefresh = false;
            }
            UpdateState();
            ProgressAutoLocate();
            UpdateTime(null);
            Timers.inst.Add(1, 0, UpdateTime);
        }
        protected override void OnHide()
        {
            base.OnHide();
            Timers.inst.Remove(UpdateTime);
        }
        protected override void AddEventListener()
        {
            base.AddEventListener();
            EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdateState);
        }
        protected override void RemoveEventListener()
        {
            base.RemoveEventListener();
            EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdateState);
        }
        private void InitUI()
        {
            _ui.m_c1.SetSelectedIndex(ActivityAfuGiftDataManager.Instance.GetIsBuy() ? 1 : 0);
            _rewardListUI.ResizeToFit();
            InitProgressWidth();
        }
        private void InitProgressWidth()
        {
            GProgressBar gProgressBar = _ui.m_panel.m_scrollPane.m_progress;
            // 根据列表 初始化进度条长度
            float marginLeft = 149;
            gProgressBar.width = marginLeft + _rewardListUI.GetChildAt(_rewardListUI.numChildren - 1).position.x - _rewardListUI.GetChildAt(0).position.x;
            // 初始化进度条值
            int indexDay = ActivityAfuGiftDataManager.Instance.GetIndexDay();
            gProgressBar.value = CalculateProgressValue(indexDay, _rewardListUI.numChildren);
        }
        /// 
        /// 滚动到最新日期
        /// 
        private void ProgressAutoLocate()
        {
            _ui.m_panel.m_scrollPane.target.scrollPane.posX
                = (ActivityAfuGiftDataManager.Instance.GetIndexDay() - 1) * (_rewardListUI.GetChildAt(0).width + _rewardListUI.columnGap);
        }
        private double CalculateProgressValue(int indexDay, int sumDay)
        {
            int defaultLen = 18;
            if (indexDay == sumDay)
            {
                return 100;
            }
            if (indexDay == 1)
            {
                return defaultLen;
            }
            return defaultLen + (100 - defaultLen) / (sumDay - 1) * (indexDay - 1);
        }
        private void UpdateTime(object param)
        {
            if (!ActivityAfuGiftDataManager.Instance.IsOpen)
            {
                return;
            }
            long curTime = TimeHelper.ServerNow();
            var activityInfo = ActivityGlobalDataManager.Instance.GetActivityInfoOneByType(ActivityType.AFZL);
            if (activityInfo != null)
            {
                long endTime = activityInfo.EndTime;
                _ui.m_txtTime.text = TimeUtil.FormattingTimeTo_DDHHmm(endTime - curTime);
            }
        }
        private void RenderListReward(int index, GObject item)
        {
            item.data = index;
            UI_reward.ProxyEnd();
            UI_reward rewardUI = UI_reward.Proxy(item);
            rewardUI.m_day.m_day.SetVar("day", (index + 1).ToString()).FlushVars();
            // 已经到达的日期
            int passDay = ActivityAfuGiftDataManager.Instance.GetIndexDay();
            int arrive = (index + 1) <= passDay ? 0 : 1;
            rewardUI.m_day.m_light.SetSelectedIndex(arrive);
            // 当日高亮
            rewardUI.m_c1.SetSelectedIndex((index + 1) == passDay ? 1 : 0);
            int itemNormalId = ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusFreeArr[0][0];
            int itemVipId1 = ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[0][0];
            int itemVipId2 = ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[1][0];
            LoadItem(itemNormalId, rewardUI.m_reward_normal, ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusFreeArr[0][1]);
            LoadItem(itemVipId1, rewardUI.m_reward_vip1, ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[0][1], true);
            LoadItem(itemVipId2, rewardUI.m_reward_vip2, ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[1][1], true, true);
        }
        private void LoadItem(int itemID, GObject obj, int num, bool isVip = false, bool release = false)
        {
            ItemCfg itemNormal = ItemCfgArray.Instance.GetCfg(itemID);
            UI_ComItem comItem = UI_ComItem.Proxy(obj);
            comItem.m_loaIcon.url = ResPathUtil.GetIconPath(itemNormal);
            comItem.m_txtCount.text = num.ToString();
            comItem.m_QualityType.selectedIndex = itemNormal.rarity - 1;
            comItem.target.onClick.Add(OnItemClick);
            int dayIndex = (int)obj.parent.data + 1;
            // 已经到达的日期
            int passDay = ActivityAfuGiftDataManager.Instance.GetIndexDay();
            bool arrive = dayIndex <= passDay;
            // 显示锁/遮罩
            if (isVip)
            {
                if (ActivityAfuGiftDataManager.Instance.GetIsBuy())
                {
                    comItem.m_Lock.SetSelectedIndex(arrive ? 0 : 2);
                }
                else
                {
                    comItem.m_Lock.SetSelectedIndex(1);
                }
            }
            else
            {
                comItem.m_Lock.SetSelectedIndex(arrive ? 0 : 2);
            }
            bool canGet = false;
            int getState;
            if (arrive)
            {
                if (isVip)
                {
                    getState = ActivityAfuGiftDataManager.Instance.GetSuperRewardStateByDay(dayIndex - 1);
                }
                else
                {
                    getState = ActivityAfuGiftDataManager.Instance.GetNormalRewardStateByDay(dayIndex - 1);
                }
                switch (getState)
                {
                    case ConstBonusStatus.CAN_NOT_GET:
                        comItem.m_grpGot.visible = false;
                        obj.touchable = true;
                        // 隐藏红点
                        RedDotController.Instance.SetComRedDot(obj.asCom, false);
                        break;
                    case ConstBonusStatus.CAN_GET:
                        canGet = true;
                        comItem.m_grpGot.visible = false;
                        obj.touchable = true;
                        // 显示红点
                        RedDotController.Instance.SetComRedDot(obj.asCom, true, "", -33, 27);
                        break;
                    case ConstBonusStatus.GOT:
                        comItem.m_grpGot.visible = true;
                        obj.touchable = false;
                        // 隐藏红点
                        RedDotController.Instance.SetComRedDot(obj.asCom, false);
                        break;
                }
            }
            else
            {
                canGet = false;
                comItem.m_grpGot.visible = false;
                obj.touchable = true;
                // 隐藏红点
                RedDotController.Instance.SetComRedDot(obj.asCom, false);
            }
            obj.data = new GetState
            {
                rewardID = itemID,
                isVip = isVip,
                canGet = canGet
            };
            UI_ComItem.ProxyEnd();
        }
        private void OnItemClick(EventContext eventContext)
        {
            GObject obj = (GObject)eventContext.sender;
            GetState getState = (GetState)(obj.data);
            if (getState.canGet)
            {
                ActivityAfuGiftProxy.ReqGetReward(getState.isVip, (int)obj.parent.data + 1).Coroutine();
            }
            else
            {
                GoodsItemTipsController.ShowItemTips(getState.rewardID);
            }
        }
        /// 
        /// 领取所有奖励按钮
        /// 
        private void OnClickBtnGet()
        {
            if (!ActivityAfuGiftDataManager.Instance.IsOpen)
            {
                PromptController.Instance.ShowFloatTextPrompt("活动已结束");
                return;
            }
            if (!ActivityAfuGiftDataManager.Instance.GetIsBuy())
            {
                var activityInfo = ActivityGlobalDataManager.Instance.GetActivityInfoOneByType(ActivityType.AFZL);
                if (activityInfo != null)
                {
                    var cfg = ActivityOpenCfgArray.Instance.GetCfg(activityInfo.ActivityId);
                    if (cfg.paramsArr != null && cfg.paramsArr.Length > 0)
                    {
                        int id = cfg.paramsArr[0];
                        // 跳转充值画面
                        ReqShopBuy(id).Coroutine();
                    }
                }
                return;
            }
            ActivityAfuGiftProxy.ReqGetAllReward().Coroutine();
        }
        /// 
        /// 充值,领取东西后调用
        /// 
        private void UpdateState()
        {
            if (!ActivityAfuGiftDataManager.Instance.IsOpen)
            {
                //Hide();
                return;
            }
            InitUI();
            // 更新底部按钮文本
            _ui.m_c1.SetSelectedIndex(ActivityAfuGiftDataManager.Instance.GetIsBuy() ? 1 : 0);
            // 更新锁 红点状态
            _rewardListUI.numItems = ActivityAfuGiftDataManager.Instance.RewardCfgs.Count;
            UpdateButtonState();
        }
        /// 
        /// 更新一键领取按钮状态
        /// 
        public void UpdateButtonState()
        {
            if (ActivityAfuGiftDataManager.Instance.GetIsBuy())
            {
                // 0-普通 1-变灰
                _ui.m_btnGetState.SetSelectedIndex(ActivityAfuGiftDataManager.Instance.HaveCanGetReward() ? 0 : 1);
            }
            // 没有充值,保持常亮
            else
            {
                _ui.m_btnGetState.SetSelectedIndex(0);
            }
        }
    }
}