using System;
using EnhancedUI.EnhancedScroller;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using GameCore;
public class EventPartnerScrollViewItem : EnhancedScrollerCellView
{
public TMP_Text textName, textLvl, textBtnYes, textState, textTime;
public Head avatar;
public Button btnNo, btnYes;
public GameObject iconLoadingGo, btnGrayGo, timeGo;
private string _playfabId;
private const string AcceptKey = "UI_EventPartnerFishbowlPanel_18", InviteKey = "UI_EventPartnerFishbowlPanel_17";
private ScrollViewItemInfo _info;
private bool _isNew = true;
public void Init(ScrollViewItemInfo info)
{
if (info.Type == EScrollViewType.Title)
{
Debug.Log( "[EventPartner] An item scrollViewCell is initiated with title info.");
return;
}
_info = info;
_playfabId = info.PlayfabId;
textName.text = info.DisplayName;
avatar.SetData(info.AvatarUrl);
textLvl.text = info.Level.ToString();
btnNo.transform.parent.gameObject.SetActive(info.Type != EScrollViewType.Friend && info.Type != EScrollViewType.MyInvitation);
textBtnYes.text = LocalizationMgr.GetText(info.Type == EScrollViewType.Partner2Accept ? AcceptKey : InviteKey);
if (info.Type == EScrollViewType.MyInvitation)
{
btnYes.transform.parent.gameObject.SetActive(false);
btnGrayGo.SetActive(true);
}
else //(info.Type == EScrollViewType.Partner2Accept)
{
btnYes.transform.parent.gameObject.SetActive(true);
btnGrayGo.SetActive(false);
}
// btnYes.gameObject.SetActive(info.Type == EScrollViewType.Partner2Accept || !info.IsInvitationPending);
// Debug.Log($"[EventPartner]{info.DisplayName}: {info.Type != EScrollViewType.Partner2Accept && info.IsInvitationPending}");
// btnGrayGo.SetActive(info.Type != EScrollViewType.Partner2Accept && info.IsInvitationPending);
if (info.LastLoginTime.HasValue)
textTime.text = ConvertTools.ConvertActiveTime(ZZTimeHelper.UtcNow() - info.LastLoginTime.Value);
else
{
textTime.text = "";
Debug.Log($"[EventPartner]Fail to get last login time.");
}
timeGo.SetActive(info.Type == EScrollViewType.Friend && textTime.text != "");
textState.gameObject.SetActive(info.Type == EScrollViewType.MyInvitation && info.IsFull);
if (!_isNew)
return;
_isNew = false;
btnNo.onClick.AddListener(OnClickIgnore);
btnYes.onClick.AddListener(info.Type == EScrollViewType.Partner2Accept ? OnClickAccept : OnClickInvite);
}
private void OnClickInvite()
{
EventPartnerAct.Ctx.EventAggregator.Publish(new EventPartnerClickInvite { Info = _info });
}
private void OnClickAccept()
{
EventPartnerAct.Ctx.EventAggregator.Publish(new EventPartnerClickAccept { Info = _info });
}
private void OnClickIgnore()
{
EventPartnerAct.Ctx.EventAggregator.Publish(new EventPartnerClickIgnore { Info = _info });
}
public class ScrollViewItemInfo : IEquatable
{
public EScrollViewType Type;
public string PlayfabId;
public string AvatarUrl;
public string DisplayName;
public int Level;
public bool IsFull = false;
public string Title;
public DateTime? LastLoginTime;
#region EQ override
public bool Equals(ScrollViewItemInfo other)
{
return Type == other.Type && PlayfabId == other.PlayfabId && Title == other.Title;
}
public override bool Equals(object obj)
{
return obj is ScrollViewItemInfo other && Equals(other);
}
public override int GetHashCode()
{
return HashCode.Combine((int)Type, PlayfabId, AvatarUrl, DisplayName, Level,
Title, LastLoginTime);
}
#endregion
}
public enum EScrollViewType
{
Title,
Recommendation,
Friend,
Partner2Accept,
MyInvitation
}
}
public class EventPartnerRemoveScrollViewItem
{
public EventPartnerScrollViewItem.ScrollViewItemInfo Info;
}
public class EventPartnerClickAccept
{
public EventPartnerScrollViewItem.ScrollViewItemInfo Info;
}
public class EventPartnerClickInvite
{
public EventPartnerScrollViewItem.ScrollViewItemInfo Info;
}
public class EventPartnerClickIgnore
{
public EventPartnerScrollViewItem.ScrollViewItemInfo Info;
}