using System;  
 | 
using System.Collections.Generic;  
 | 
using System.Linq;  
 | 
using UnityEngine;  
 | 
using UnityEngine.UI;  
 | 
  
 | 
  
 | 
namespace vnxbqy.UI  
 | 
{  
 | 
    public class GuardComposeConfirmWin : Window  
 | 
    {  
 | 
        [SerializeField] Button popConfirmBtn;  
 | 
        [SerializeField] RichText popConfirmInfo;  
 | 
        [SerializeField] Text popConfirmTitle;  
 | 
        [SerializeField] Button closeBtn;  
 | 
  
 | 
        SelectEquipModel _selectModel;  
 | 
        SelectEquipModel selectModel  
 | 
        {  
 | 
            get { return _selectModel ?? (_selectModel = ModelCenter.Instance.GetModel<SelectEquipModel>()); }  
 | 
        }  
 | 
        ComposeWinModel _composeWinModel;  
 | 
        ComposeWinModel composeWinModel  
 | 
        {  
 | 
            get { return _composeWinModel ?? (_composeWinModel = ModelCenter.Instance.GetModel<ComposeWinModel>()); }  
 | 
        }  
 | 
        ItemModel itemModel = null;  
 | 
        #region Built-in  
 | 
        protected override void BindController()  
 | 
        {  
 | 
  
 | 
        }  
 | 
        protected override void AddListeners()  
 | 
        {  
 | 
            closeBtn.AddListener(CloseClick);  
 | 
            popConfirmBtn.AddListener(ClickGuardCompose);  
 | 
        }  
 | 
  
 | 
        protected override void OnPreOpen()  
 | 
        {  
 | 
            KnapsackTimeCDMgr.Instance.RefreshItemOverdueTimeAct += UpdateRemainTime;  
 | 
            SetDisplay();  
 | 
        }  
 | 
  
 | 
        protected override void OnAfterOpen()  
 | 
        {  
 | 
            
 | 
        }  
 | 
  
 | 
        protected override void OnPreClose()  
 | 
        {  
 | 
            KnapsackTimeCDMgr.Instance.RefreshItemOverdueTimeAct -= UpdateRemainTime;  
 | 
        }  
 | 
  
 | 
        protected override void OnAfterClose()  
 | 
        {  
 | 
  
 | 
        }  
 | 
        #endregion  
 | 
  
 | 
        private void SetDisplay()  
 | 
        {  
 | 
            var unfixeAddDict = selectModel.GetHaveUnfixedSelectItem();  
 | 
            var modellist = unfixeAddDict.Values.ToList();  
 | 
            modellist.Sort(CompareByOverdueTime);  
 | 
            itemModel = modellist.Count > 0 ? modellist[0] : null;  
 | 
            if(itemModel != null)  
 | 
            {  
 | 
                UpdateRemainTime(itemModel.guid);  
 | 
            }  
 | 
        }  
 | 
  
 | 
        private void UpdateRemainTime(string guid)  
 | 
        {  
 | 
            if (composeWinModel.CurComposeModel == null  
 | 
                || itemModel == null) return;  
 | 
  
 | 
            if (itemModel.guid == guid)  
 | 
            {  
 | 
                int remainTime = 0;  
 | 
                bool isRemain = TryGetRemainTime(itemModel, out remainTime);  
 | 
                if (isRemain)  
 | 
                {  
 | 
                    ItemConfig itemConfig = ItemConfig.Get(composeWinModel.CurComposeModel.makeID[0]);  
 | 
                    popConfirmInfo.text = Language.Get("Compose111", SecondsToHM(remainTime), itemConfig.ItemName);  
 | 
                }  
 | 
            }  
 | 
        }  
 | 
  
 | 
        public string SecondsToHM(int _seconds)  
 | 
        {  
 | 
            string timeStr = string.Empty;  
 | 
            int hours = _seconds / 3600;  
 | 
            int mins = _seconds % 3600 / 60;  
 | 
            if (hours > 0)  
 | 
            {  
 | 
                timeStr = StringUtility.Contact(hours, Language.Get("Hour"));  
 | 
            }  
 | 
            if (mins > 0)  
 | 
            {  
 | 
                timeStr = StringUtility.Contact(timeStr, mins, Language.Get("Minute"));  
 | 
            }  
 | 
            return timeStr;  
 | 
        }  
 | 
  
 | 
        private int CompareByOverdueTime(ItemModel start, ItemModel end)  
 | 
        {  
 | 
            int remainTime1 = 0;  
 | 
            int remainTime2 = 0;  
 | 
            bool isRemain1 = TryGetRemainTime(start, out remainTime1);  
 | 
            bool isRemain2 = TryGetRemainTime(end, out remainTime2);  
 | 
            if (isRemain1.CompareTo(isRemain2) != 0) return -isRemain1.CompareTo(isRemain2);  
 | 
            if (remainTime1.CompareTo(remainTime2) != 0) return remainTime1.CompareTo(remainTime2);  
 | 
            return 0;  
 | 
        }  
 | 
  
 | 
        private bool TryGetRemainTime(ItemModel model, out int seconds)  
 | 
        {  
 | 
            seconds = 0;  
 | 
            if (model.config.EquipPlace != (int)RoleEquipType.Guard  
 | 
                || model.config.ExpireTime <= 0) return false;  
 | 
  
 | 
            ItemCDCool cool = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.guid);  
 | 
            bool isShow = model.config.ExpireTime > 0;  
 | 
            if (isShow)  
 | 
            {  
 | 
                List<int> itemEffectTime = model.GetUseData((int)ItemUseDataKey.createTime);  
 | 
                seconds = model.config.ExpireTime;  
 | 
                if (itemEffectTime != null && itemEffectTime[0] != 0 && model.guid != "")  
 | 
                {  
 | 
                    seconds = cool == null ? 0 : (int)cool.GetRemainTime();  
 | 
                }  
 | 
                return true;  
 | 
            }  
 | 
            return false;  
 | 
        }  
 | 
  
 | 
  
 | 
        private void ClickGuardCompose()  
 | 
        {  
 | 
            composeWinModel.SetUpdateSendComposeEvent();  
 | 
            CloseClick();  
 | 
        }  
 | 
    }  
 | 
}  
 |