using System; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
namespace vnxbqy.UI 
 | 
{ 
 | 
     public class FriendTips : MonoBehaviour 
 | 
    { 
 | 
        [SerializeField] ScrollerController typeCtrl; 
 | 
        [SerializeField] Button searchBtn; 
 | 
        [SerializeField] GameObject searchBackIcon; 
 | 
        [SerializeField] InputField inputField; 
 | 
        [SerializeField] GameObject searchObj; 
 | 
        [SerializeField] PlayerInfoCell playerInfoCell; 
 | 
        [SerializeField] GameObject contactlistObj; 
 | 
        [SerializeField] Button recommendBtn; 
 | 
        [SerializeField] GameObject chatSendObj; 
 | 
        [SerializeField] ChatContentBehaviour chatBeh; 
 | 
        [SerializeField] Text speakOtherNameText; 
 | 
        [SerializeField] GameObject selectFriendObj; 
 | 
        [SerializeField] GameObject unSelectFriendObj; 
 | 
        [SerializeField] Text closeCnt; //亲密度 
 | 
  
 | 
        List<GroupType> typelist = new List<GroupType>(); 
 | 
  
 | 
        public static GroupType lookGroupType = GroupType.None; 
 | 
        public static int selectPlayerId = 0; 
 | 
        Dictionary<uint, FriendPlayer> lookPlayerInfoDict = null; 
 | 
        FriendsModel _friendsModel; 
 | 
        FriendsModel friendsModel 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return _friendsModel ?? (_friendsModel = ModelCenter.Instance.GetModel<FriendsModel>()); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void Awake() 
 | 
        { 
 | 
            typeCtrl.OnRefreshCell += RefreshCell; 
 | 
            typelist.Clear(); 
 | 
            typelist.Add(GroupType.RecentContact); 
 | 
            typelist.Add(GroupType.Friend); 
 | 
            typelist.Add(GroupType.Enemy); 
 | 
            typelist.Add(GroupType.Balcklist); 
 | 
        } 
 | 
  
 | 
        private void OnEnable() 
 | 
        { 
 | 
            speakOtherNameText.text = ""; 
 | 
            closeCnt.text = "0"; 
 | 
            friendsModel.RefreshFriendModel += RefreshFriendInfo; 
 | 
            friendsModel.RefreshFriendCntEvent += RefreshFriendCnt; 
 | 
            ChatCtrl.Inst.presentChatType = ChatInfoType.Friend; 
 | 
            chatBeh.chatType = ChatInfoType.Friend; 
 | 
            lookPlayerInfoDict = null; 
 | 
            lookGroupType = GroupType.None; 
 | 
            CreateCell(); 
 | 
            friendsModel.OnSendCA9A3_tagCGQueryRecommendFriends(); 
 | 
            searchBtn.AddListener(ClickSearchBtn); 
 | 
            recommendBtn.AddListener(ClickRecommendBtn); 
 | 
            searchObj.SetActive(false); 
 | 
            contactlistObj.SetActive(true); 
 | 
            searchBackIcon.SetActive(false); 
 | 
            SetDefaultSelect(); 
 | 
        } 
 | 
  
 | 
        private void OnDisable() 
 | 
        { 
 | 
            friendsModel.RefreshFriendModel -= RefreshFriendInfo; 
 | 
            friendsModel.RefreshFriendCntEvent -= RefreshFriendCnt; 
 | 
            recommendBtn.RemoveAllListeners(); 
 | 
            searchBtn.RemoveAllListeners(); 
 | 
            lookGroupType = GroupType.None; 
 | 
            selectPlayerId = 0; 
 | 
        } 
 | 
  
 | 
        private void SetDefaultSelect() 
 | 
        { 
 | 
            bool isSelect = false; 
 | 
            for (int i = 0; i < typelist.Count; i++) 
 | 
            { 
 | 
                var type = typelist[i]; 
 | 
                lookPlayerInfoDict = friendsModel.GetFriendInfoDict((byte)type); 
 | 
                switch (type) 
 | 
                { 
 | 
                    case GroupType.RecentContact: 
 | 
                    case GroupType.Friend: 
 | 
                        if (lookPlayerInfoDict != null && lookPlayerInfoDict.Count > 0) 
 | 
                        { 
 | 
                            ClickTypeBtn(type); 
 | 
                            foreach (var key in lookPlayerInfoDict.Keys) 
 | 
                            { 
 | 
                                var playerName = lookPlayerInfoDict[key].PlayerName; 
 | 
                                ClickPlayer((int)key,playerName); 
 | 
                                isSelect = true; 
 | 
                                break; 
 | 
                            } 
 | 
                        } 
 | 
                        break; 
 | 
                } 
 | 
                if(isSelect) 
 | 
                { 
 | 
                    return; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void RefreshFriendInfo() 
 | 
        { 
 | 
            CreateCell(); 
 | 
        } 
 | 
  
 | 
        private void RefreshFriendCnt(GroupType type, bool addFriendPlayer) 
 | 
        { 
 | 
            CreateCell(); 
 | 
        }  
 | 
  
 | 
        private void CreateCell() 
 | 
        { 
 | 
            
 | 
            typeCtrl.Refresh(); 
 | 
            lookPlayerInfoDict = null; 
 | 
            for (int i = 0; i < typelist.Count; i++) 
 | 
            { 
 | 
                typeCtrl.AddCell(ScrollerDataType.Header,i); 
 | 
                if(lookGroupType == typelist[i]) 
 | 
                { 
 | 
                    lookPlayerInfoDict = friendsModel.GetFriendInfoDict((byte)lookGroupType); 
 | 
                    if(lookPlayerInfoDict != null) 
 | 
                    { 
 | 
                        foreach (var id in lookPlayerInfoDict.Keys) 
 | 
                        { 
 | 
                            typeCtrl.AddCell(ScrollerDataType.Normal, (int)id); 
 | 
                        } 
 | 
                    } 
 | 
                   
 | 
                } 
 | 
            } 
 | 
            typeCtrl.Restart(); 
 | 
  
 | 
            if(selectPlayerId != 0) 
 | 
            { 
 | 
                selectFriendObj.SetActive(true); 
 | 
                unSelectFriendObj.SetActive(false); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                selectFriendObj.SetActive(false); 
 | 
                unSelectFriendObj.SetActive(true); 
 | 
                ChatCtrl.Inst.PteChatID = 0; 
 | 
                ChatCtrl.Inst.PteChatName = string.Empty; 
 | 
                LanguageVerify.toPlayerLevel = 0; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void RefreshCell(ScrollerDataType type, CellView cell) 
 | 
        { 
 | 
            switch (type) 
 | 
            { 
 | 
                case ScrollerDataType.Header: 
 | 
                    GroupType groupType = typelist[cell.index]; 
 | 
                    ContactType contactType = cell.GetComponent<ContactType>(); 
 | 
                    Button typeBtn = cell.GetComponent<Button>(); 
 | 
                    contactType.Init(groupType,lookGroupType); 
 | 
                    typeBtn.RemoveAllListeners(); 
 | 
                    typeBtn.AddListener(()=> { ClickTypeBtn(groupType); }); 
 | 
                    break; 
 | 
                case ScrollerDataType.Normal: 
 | 
                    PlayerInfoCell infoCell = cell.GetComponent<PlayerInfoCell>(); 
 | 
                    Button infoBtn = cell.GetComponent<Button>(); 
 | 
                    infoCell.Init(cell.index,lookGroupType,selectPlayerId); 
 | 
                    string playerName = lookPlayerInfoDict[(uint)cell.index].PlayerName; 
 | 
                    infoBtn.RemoveAllListeners(); 
 | 
                    infoBtn.AddListener(()=> { ClickPlayer(cell.index, playerName); }); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void ClickTypeBtn(GroupType groupType) 
 | 
        { 
 | 
         
 | 
            if (lookGroupType != groupType) 
 | 
            { 
 | 
                lookGroupType = groupType; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                lookGroupType = GroupType.None; 
 | 
            } 
 | 
            speakOtherNameText.text = ""; 
 | 
            closeCnt.text = "0"; 
 | 
            selectPlayerId = 0; 
 | 
            CreateCell(); 
 | 
        } 
 | 
  
 | 
        private void ClickPlayer(int playerId,string playerName) 
 | 
        { 
 | 
            if (playerId == selectPlayerId) return; 
 | 
  
 | 
            selectFriendObj.SetActive(true); 
 | 
            unSelectFriendObj.SetActive(false); 
 | 
            selectPlayerId = playerId; 
 | 
            typeCtrl.m_Scorller.RefreshActiveCellViews(); 
 | 
            ChatCtrl.Inst.PteChatID = playerId; 
 | 
            ChatCtrl.Inst.PteChatName = playerName; 
 | 
            speakOtherNameText.text = Language.Get("Friend107", UIHelper.ServerStringTrim(playerName)); 
 | 
            closeCnt.text = FlowerGiftModel.Instance.GetCloseCnt(playerId).ToString(); 
 | 
            friendsModel.RemoveFriendRed(lookGroupType,playerId); 
 | 
        } 
 | 
  
 | 
  
 | 
        private void ClickSearchBtn() 
 | 
        { 
 | 
            if(string.IsNullOrEmpty(inputField.text.Trim())) 
 | 
            { 
 | 
                SysNotifyMgr.Instance.ShowTip("NoPlayerName"); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            speakOtherNameText.text = ""; 
 | 
            closeCnt.text = "0"; 
 | 
            if (!searchObj.activeInHierarchy) 
 | 
            { 
 | 
                searchObj.SetActive(true); 
 | 
                contactlistObj.SetActive(false); 
 | 
                searchBackIcon.SetActive(true); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                lookGroupType = GroupType.None; 
 | 
                selectPlayerId = 0; 
 | 
                searchObj.SetActive(false); 
 | 
                contactlistObj.SetActive(true); 
 | 
                searchBackIcon.SetActive(false); 
 | 
                CreateCell(); 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            Dictionary<byte,Dictionary<uint,FriendPlayer>> groupDict = friendsModel.GetGroupAllInfo(); 
 | 
           
 | 
            int playerId = 0; 
 | 
            string playerName = ""; 
 | 
            int playerLevel = 0; 
 | 
            GroupType groupType = GroupType.None; 
 | 
  
 | 
            foreach(var type in groupDict.Keys) 
 | 
            { 
 | 
                foreach(var id in groupDict[type].Keys) 
 | 
                { 
 | 
                    FriendPlayer friendPlayer = friendsModel.GetFirendInfo(id,type); 
 | 
                    if(UIHelper.ServerStringTrim(friendPlayer.PlayerName).Contains(inputField.text.Trim())) 
 | 
                    { 
 | 
                        playerLevel = friendPlayer.LV; 
 | 
                        playerName = friendPlayer.PlayerName; 
 | 
                        playerId = (int)id; 
 | 
                        groupType = (GroupType)type; 
 | 
                        break; 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                if(playerId != 0) 
 | 
                { 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if(playerId != 0) 
 | 
            { 
 | 
                playerInfoCell.SetActive(true); 
 | 
                playerInfoCell.Init(playerId,groupType); 
 | 
                Button button = playerInfoCell.GetComponent<Button>(); 
 | 
                button.RemoveAllListeners(); 
 | 
                button.AddListener(()=> 
 | 
                { 
 | 
                    selectFriendObj.SetActive(true); 
 | 
                    unSelectFriendObj.SetActive(false); 
 | 
                    ChatCtrl.Inst.PteChatID = playerId; 
 | 
                    ChatCtrl.Inst.PteChatName = playerName; 
 | 
                    LanguageVerify.toPlayerLevel = playerLevel; 
 | 
                    playerInfoCell.Init(playerId, groupType,playerId); 
 | 
                    speakOtherNameText.text = Language.Get("Friend107", UIHelper.ServerStringTrim(playerName)); 
 | 
                    closeCnt.text = FlowerGiftModel.Instance.GetCloseCnt(playerId).ToString(); 
 | 
                }); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
  
 | 
                selectFriendObj.SetActive(false); 
 | 
                unSelectFriendObj.SetActive(true); 
 | 
                playerInfoCell.SetActive(false); 
 | 
            } 
 | 
  
 | 
        } 
 | 
  
 | 
  
 | 
        private void ClickRecommendBtn() 
 | 
        { 
 | 
            WindowCenter.Instance.Open<AddFriendWin>(); 
 | 
        } 
 | 
    } 
 | 
} 
 |