using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
  
 | 
public class FirstChargeWin : FunctionsBaseWin 
 | 
{ 
 | 
    [SerializeField] ButtonEx btnClose; 
 | 
    [Header("标签页")] 
 | 
    [SerializeField] TextEx[] txtTabTitles; 
 | 
    [SerializeField] ButtonEx[] btnTabs; 
 | 
    [SerializeField] RedpointBehaviour[] rpTabs; 
 | 
    [SerializeField] int fontSizeBefore = 24; 
 | 
    [SerializeField] int fontSizeAfter = 30; 
 | 
    [Header("主物品")] 
 | 
    [SerializeField] TextEx txtName; 
 | 
    [SerializeField] TextEx txtDesc; 
 | 
    [SerializeField] ImageEx imgCountry; 
 | 
    [SerializeField] ImageEx imgJob; 
 | 
    [SerializeField] UIHeroController roleLhModel;    //展示英雄立绘 
 | 
    [SerializeField] ButtonEx btnPreviewHero; 
 | 
    [Header("额外道具宣传文字")] 
 | 
    [SerializeField] ImageEx imgExtraRewardText; 
 | 
    [SerializeField] TextEx txtExtraRewardText; 
 | 
  
 | 
    [Header("奖励物品")] 
 | 
    [SerializeField] FirstChargeDayAward[] days; 
 | 
  
 | 
    [Header("性价比文字")] 
 | 
    [SerializeField] TextEx txtPercentage; 
 | 
  
 | 
    [Header("购买和领取")] 
 | 
    [SerializeField] ImageEx imgHave; 
 | 
    [SerializeField] ImageEx imgNoHave; 
 | 
    [SerializeField] ImageEx imgRed; 
 | 
    [SerializeField] TextEx txtHave; 
 | 
    [SerializeField] ButtonEx btnHave; 
 | 
    [SerializeField] TextEx txtBuy; 
 | 
    [SerializeField] ButtonEx btnBuy; 
 | 
    FirstChargeManager model { get { return FirstChargeManager.Instance; } } 
 | 
    protected override void InitComponent() 
 | 
    { 
 | 
        base.InitComponent(); 
 | 
        btnHave.SetListener(OnClickHaveButton); 
 | 
        btnBuy.SetListener(OnClickBuyButton); 
 | 
        btnPreviewHero.SetListener(OnClickPreviewHero); 
 | 
        btnClose.SetListener(() => UIManager.Instance.CloseWindow<FirstChargeWin>()); 
 | 
    } 
 | 
  
 | 
    protected override void OnPreOpen() 
 | 
    { 
 | 
        base.OnPreOpen(); 
 | 
        InitRedPoint(); 
 | 
  
 | 
        functionOrder = GetDefaultTabIndex(); 
 | 
        tabButtons[functionOrder].SelectBtn(true); 
 | 
  
 | 
        int firstId = model.GetFirstIDByTabIndex(functionOrder); 
 | 
        model.SetClickTabState(firstId); 
 | 
        model.OnUpdateFirstChargeInfo += OnUpdateFirstChargeInfo; 
 | 
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; 
 | 
        DisplayMainItem(); 
 | 
        Display(); 
 | 
    } 
 | 
  
 | 
    protected override void OnPreClose() 
 | 
    { 
 | 
        base.OnPreClose(); 
 | 
        model.OnUpdateFirstChargeInfo -= OnUpdateFirstChargeInfo; 
 | 
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; 
 | 
    } 
 | 
  
 | 
    private void OnSecondEvent() 
 | 
    { 
 | 
        int firstId = model.GetFirstIDByTabIndex(functionOrder); 
 | 
        if (!model.TryGetFirstChargeDataByFirstId(firstId, out var firstChargeData)) 
 | 
            return; 
 | 
        if (!firstChargeData.IsUnlock()) 
 | 
            return; 
 | 
        if (!firstChargeData.IsBuy()) 
 | 
            return; 
 | 
        DisplayButton(firstId); 
 | 
    } 
 | 
  
 | 
    protected override void OpenSubUIByTabIndex() 
 | 
    { 
 | 
        int firstId = model.GetFirstIDByTabIndex(functionOrder); 
 | 
        model.SetClickTabState(firstId); 
 | 
        Display(); 
 | 
    } 
 | 
  
 | 
    private void OnUpdateFirstChargeInfo() 
 | 
    { 
 | 
        Display(); 
 | 
    } 
 | 
    private void OnClickBuyButton() 
 | 
    { 
 | 
        int firstId = model.GetFirstIDByTabIndex(functionOrder); 
 | 
        if (!model.TryGetFirstChargeConfigByFirstID(firstId, out FirstChargeConfig firstChargeConfig)) 
 | 
            return; 
 | 
        RechargeManager.Instance.CTG(firstChargeConfig.CTGID); 
 | 
    } 
 | 
  
 | 
    private void OnClickHaveButton() 
 | 
    { 
 | 
        int firstId = model.GetFirstIDByTabIndex(functionOrder); 
 | 
        model.AutoClaimAllRewards(firstId); 
 | 
    } 
 | 
    private void OnClickPreviewHero() 
 | 
    { 
 | 
        HeroUIManager.Instance.selectForPreviewHeroID = model.mainItemId; 
 | 
        UIManager.Instance.OpenWindow<HeroBestWin>(); 
 | 
    } 
 | 
    private void InitRedPoint() 
 | 
    { 
 | 
        for (int i = 0; i < rpTabs.Length; i++) 
 | 
        { 
 | 
            int firstID = model.GetFirstIDByTabIndex(i); 
 | 
            int redpointId = model.GetRedpointIdByFirstId(firstID); 
 | 
            rpTabs[i].redpointId = redpointId; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private int GetDefaultTabIndex() 
 | 
    { 
 | 
        List<int> unlockedAndBoughtAndClaimable = new List<int>();      // 已解锁已购买可领取 
 | 
        List<int> unlockedAndNotBought = new List<int>();               // 已解锁未购买 
 | 
        List<int> unlockedAndBoughtAndNotClaimed = new List<int>();     // 已解锁已购买未领取 
 | 
  
 | 
        var firstChargeList = FirstChargeConfig.GetKeys(); 
 | 
        if (firstChargeList != null) 
 | 
        { 
 | 
            firstChargeList.Sort(); 
 | 
            foreach (int firstId in firstChargeList) 
 | 
            { 
 | 
                if (!model.TryGetFirstChargeDataByFirstId(firstId, out FirstChargeData firstChargeData)) 
 | 
                    continue; 
 | 
  
 | 
                if (!firstChargeData.IsUnlock()) 
 | 
                    continue; 
 | 
  
 | 
                if (firstChargeData.IsBuy()) 
 | 
                { 
 | 
                    bool hasClaimable = false; 
 | 
                    bool hasUnclaimed = false; 
 | 
  
 | 
                    for (int day = 1; day <= model.maxDay; day++) 
 | 
                    { 
 | 
                        int awardState = firstChargeData.GetHaveState(day); 
 | 
                        if (awardState == 2) // 可领取 
 | 
                        { 
 | 
                            hasClaimable = true; 
 | 
                            break; 
 | 
                        } 
 | 
                        else if (awardState == 1) // 未到领取时间 
 | 
                        { 
 | 
                            hasUnclaimed = true; 
 | 
                        } 
 | 
                    } 
 | 
  
 | 
                    if (hasClaimable) 
 | 
                    { 
 | 
                        unlockedAndBoughtAndClaimable.Add(firstId); 
 | 
                    } 
 | 
                    else if (hasUnclaimed) 
 | 
                    { 
 | 
                        unlockedAndBoughtAndNotClaimed.Add(firstId); 
 | 
                    } 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    // 未购买 
 | 
                    unlockedAndNotBought.Add(firstId); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            // 按照优先级返回 
 | 
            if (unlockedAndBoughtAndClaimable.Count > 0) 
 | 
            { 
 | 
                return model.GetTabIndexByFirstID(unlockedAndBoughtAndClaimable[0]); 
 | 
            } 
 | 
            else if (unlockedAndNotBought.Count > 0) 
 | 
            { 
 | 
                return model.GetTabIndexByFirstID(unlockedAndNotBought[0]); 
 | 
            } 
 | 
            else if (unlockedAndBoughtAndNotClaimed.Count > 0) 
 | 
            { 
 | 
                return model.GetTabIndexByFirstID(unlockedAndBoughtAndNotClaimed[0]); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    private void Display() 
 | 
    { 
 | 
        int firstId = model.GetFirstIDByTabIndex(functionOrder); 
 | 
        DisplayTab(); 
 | 
        DisplayExtraRewardText(firstId); 
 | 
        DisplayAward(firstId); 
 | 
        DisplayPercentage(firstId); 
 | 
        DisplayButton(firstId); 
 | 
    } 
 | 
    public void DisplayMainItem() 
 | 
    { 
 | 
        ItemInfo itemInfo = new ItemInfo(); 
 | 
        itemInfo.itemId = FirstChargeManager.Instance.mainItemId; 
 | 
        HeroInfo heroInfo = new HeroInfo(new ItemModel(PackType.Item, itemInfo)); 
 | 
        txtName.text = heroInfo.heroConfig.Name; 
 | 
        txtName.color = UIHelper.GetUIColorByFunc(heroInfo.Quality); 
 | 
        txtDesc.text = heroInfo.heroConfig.Desc; 
 | 
        imgCountry.SetSprite(HeroUIManager.Instance.GetCountryIconName(heroInfo.heroConfig.Country)); 
 | 
        imgJob.SetSprite(HeroUIManager.Instance.GetJobIconName(heroInfo.heroConfig.Class)); 
 | 
        roleLhModel.Create(heroInfo.SkinID, 0.6f, motionName: "", isLh: true); 
 | 
        roleLhModel.transform.localScale = new Vector3(0.6f, 0.6f, 0.6f); 
 | 
    } 
 | 
  
 | 
    public void DisplayAward(int firstId) 
 | 
    { 
 | 
        for (int i = 0; i < days.Length; i++) 
 | 
        { 
 | 
            days[i].Display(firstId, i + 1); 
 | 
        } 
 | 
    } 
 | 
    public void DisplayExtraRewardText(int firstId) 
 | 
    { 
 | 
        if (!model.TryGetFirstChargeConfigByFirstID(firstId, out var config)) 
 | 
            return; 
 | 
        int extraRewardTextType = config.ExtraRewardTextType; 
 | 
        if (extraRewardTextType < 0 || extraRewardTextType > 1) 
 | 
            return; 
 | 
        if (extraRewardTextType == 0) 
 | 
        { 
 | 
            if (!IconConfig.HasKey(config.ExtraRewardTextInfo)) 
 | 
                return; 
 | 
            imgExtraRewardText.SetActive(true); 
 | 
            txtExtraRewardText.SetActive(false); 
 | 
            imgExtraRewardText.SetSprite(config.ExtraRewardTextInfo); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            if (!LanguageConfig.HasKey(config.ExtraRewardTextInfo)) 
 | 
                return; 
 | 
            imgExtraRewardText.SetActive(false); 
 | 
            txtExtraRewardText.SetActive(true); 
 | 
            txtExtraRewardText.text = Language.Get(config.ExtraRewardTextInfo); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void DisplayTab() 
 | 
    { 
 | 
        for (int i = 0; i < btnTabs.Length; i++) 
 | 
        { 
 | 
            txtTabTitles[i].fontSize = i == functionOrder ? fontSizeAfter : fontSizeBefore; 
 | 
  
 | 
            int firstID = model.GetFirstIDByTabIndex(i); 
 | 
            FirstChargeData firstChargeData; 
 | 
            if (!model.TryGetFirstChargeDataByFirstId(firstID, out firstChargeData)) 
 | 
                continue; 
 | 
            btnTabs[i].SetActive(firstChargeData.IsUnlock()); 
 | 
            OrderInfoConfig orderInfoConfig; 
 | 
            if (model.TryGetOrderInfoConfigByFirstID(firstID, out orderInfoConfig)) 
 | 
            { 
 | 
                txtTabTitles[i].text = Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNum); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void DisplayPercentage(int firstId) 
 | 
    { 
 | 
        if (!model.TryGetCTGConfigByFirstID(firstId, out CTGConfig ctgConfig)) 
 | 
            return; 
 | 
        txtPercentage.text = Language.Get("FirstCharge03", model.maxDay, ctgConfig.Percentage); 
 | 
    } 
 | 
  
 | 
    public void DisplayButton(int firstId) 
 | 
    { 
 | 
        if (!model.TryGetFirstChargeDataByFirstId(firstId, out var firstChargeData)) 
 | 
            return; 
 | 
        if (!model.TryGetOrderInfoConfigByFirstID(firstId, out OrderInfoConfig orderInfo)) 
 | 
            return; 
 | 
  
 | 
        //购买 
 | 
        bool isBuy = firstChargeData.IsBuy(); 
 | 
        btnBuy.SetActive(!isBuy); 
 | 
        btnHave.SetActive(isBuy); 
 | 
        txtBuy.text = Language.Get("PayMoneyNum", orderInfo.PayRMBNum); 
 | 
        //领取 
 | 
        int day = firstChargeData.GetNowBuyDay(); 
 | 
        //0: 已领取 1: 不可领取 2: 可领取  
 | 
        int awardState = firstChargeData.GetHaveState(day); 
 | 
        bool isAllHave = firstChargeData.IsAllHave(); 
 | 
        btnHave.interactable = awardState == 2; 
 | 
        imgNoHave.SetActive(awardState != 2); 
 | 
        imgHave.SetActive(awardState == 2); 
 | 
        imgRed.SetActive(awardState == 2); 
 | 
        if (awardState == 2) 
 | 
        { 
 | 
            txtHave.text = Language.Get("Mail09"); 
 | 
        } 
 | 
        else if (awardState == 1 || (awardState == 0 && !isAllHave)) 
 | 
        { 
 | 
            txtHave.text = firstChargeData.GetNextDayUnlockRemainingTime(); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            txtHave.text = Language.Get("FirstCharge04"); 
 | 
        } 
 | 
  
 | 
    } 
 | 
} 
 |