local FriendRequestCtrl = class("FriendRequestCtrl", BaseCtrl)
FriendRequestCtrl._mapNodeConfig = {
	inputSearch = {
		sComponentName = "TMP_InputField"
	},
	btnSearch = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Search"
	},
	txtSearchDesc = {
		sComponentName = "TMP_Text",
		sLanguageId = "Friend_SearchDesc"
	},
	txtBtnSearch = {
		sComponentName = "TMP_Text",
		sLanguageId = "Friend_Btn_Search"
	},
	imgEmptyBg = {},
	txtEmpty = {
		sComponentName = "TMP_Text",
		sLanguageId = "Friend_RequireNone"
	},
	srRequestList = {
		sComponentName = "LoopScrollView"
	},
	btnAdoptAll = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_AdoptAll"
	},
	btnRefuseAll = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_RefuseAll"
	},
	btnRecommend = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Recommend"
	},
	txtAdoptAll = {
		sComponentName = "TMP_Text",
		sLanguageId = "Friend_Btn_AdoptAll"
	},
	txtRefuseAll = {
		sComponentName = "TMP_Text",
		sLanguageId = "Friend_Btn_RefuseAll"
	},
	txtRecommend = {
		sComponentName = "TMP_Text",
		sLanguageId = "Friend_Btn_Recommend"
	},
	txtRequireCn = {
		sComponentName = "TMP_Text",
		sLanguageId = "Friend_RequireStatistics"
	},
	txtRequireCount = {sComponentName = "TMP_Text"}
}
FriendRequestCtrl._mapEventConfig = {
	FriendRefreshRequest = "Refresh",
	FriendClearSearch = "OnEvent_ClearSearch"
}
function FriendRequestCtrl:Refresh()
	self:ChangeShow(false)
	local callback = function()
		self:ChangeShow(true)
		self:RefreshList()
	end
	PlayerData.Friend:SendFriendListGetReq(callback)
end
function FriendRequestCtrl:ChangeShow(bShow)
	self._mapNode.btnAdoptAll.gameObject:SetActive(bShow)
	self._mapNode.btnRefuseAll.gameObject:SetActive(bShow)
	self._mapNode.btnRecommend.gameObject:SetActive(bShow)
	self._mapNode.btnSearch.gameObject:SetActive(bShow)
end
function FriendRequestCtrl:RefreshList()
	local nRequestNum = PlayerData.Friend:GetFriendRequestNum()
	self._mapNode.srRequestList.gameObject:SetActive(0 < nRequestNum)
	self._mapNode.imgEmptyBg:SetActive(nRequestNum == 0)
	if 0 < nRequestNum then
		for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
			self:UnbindCtrlByNode(objCtrl)
			self.tbGridCtrl[nInstanceId] = nil
		end
		self.tbFriendRequest = PlayerData.Friend:GetFriendRequestData()
		self._mapNode.srRequestList:Init(nRequestNum, self, self.OnGridRefresh)
	end
	NovaAPI.SetTMPText(self._mapNode.txtRequireCount, string.format("<color=#08D3D4>%d</color>/%d", nRequestNum, ConfigTable.GetConfigNumber("FriendApplyMax")))
end
function FriendRequestCtrl:OnGridRefresh(goGrid, gridIndex)
	local nIndex = gridIndex + 1
	local mapFriend = self.tbFriendRequest[nIndex]
	local nInstanceID = goGrid:GetInstanceID()
	if not self.tbGridCtrl[nInstanceID] then
		self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.FriendEx.FriendGridCtrl")
		self.tbGridCtrl[nInstanceID]:SetType(2)
	end
	self.tbGridCtrl[nInstanceID]:Refresh(mapFriend)
end
function FriendRequestCtrl:Awake()
	self.tbGridCtrl = {}
end
function FriendRequestCtrl:OnEnable()
end
function FriendRequestCtrl:OnDisable()
	for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
		self:UnbindCtrlByNode(objCtrl)
		self.tbGridCtrl[nInstanceId] = nil
	end
	self.tbGridCtrl = {}
end
function FriendRequestCtrl:OnDestroy()
end
function FriendRequestCtrl:OnBtnClick_Search()
	local sName = NovaAPI.GetTMPInputFieldText(self._mapNode.inputSearch)
	local sPlayerAll = PlayerData.Base:GetPlayerNickName() .. "#" .. PlayerData.Base:GetPlayerHashtag()
	local nUId = PlayerData.Base:GetPlayerId()
	if sName == sPlayerAll or tonumber(sName) == nUId then
		EventManager.Hit(EventId.OpenMessageBox, {
			nType = AllEnum.MessageBox.Alert,
			sContent = ConfigTable.GetUIText("Friend_UnableSelf")
		})
		return
	end
	if sName and sName ~= "" then
		local callback = function(mapData)
			EventManager.Hit("FriendSearch", mapData)
		end
		if string.gsub(sName, "%d", "") == "" then
			PlayerData.Friend:SendFriendUIdSearchReq(tonumber(sName), callback)
		else
			PlayerData.Friend:SendFriendNameSearchReq(sName, callback)
		end
	else
		EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("FRIEND_02"))
	end
end
function FriendRequestCtrl:OnBtnClick_AdoptAll()
	local nRequestNum = PlayerData.Friend:GetFriendRequestNum()
	if nRequestNum == 0 then
		EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Friend_NoRequest"))
		return
	end
	local nFriendNum = PlayerData.Friend:GetFriendListNum()
	if nFriendNum == ConfigTable.GetConfigNumber("FriendMax") then
		EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("FRIEND_00"))
		return
	end
	local callback = function(mapMainData)
		if mapMainData.Limit then
			EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("FRIEND_00"))
		end
		self:RefreshList()
	end
	PlayerData.Friend:SendFriendAllAgreeReq(callback)
end
function FriendRequestCtrl:OnBtnClick_RefuseAll()
	local nRequestNum = PlayerData.Friend:GetFriendRequestNum()
	if nRequestNum == 0 then
		EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Friend_NoRequest"))
		return
	end
	local callback = function()
		self:RefreshList()
	end
	local tbUId = {}
	for _, mapFriendInfo in pairs(self.tbFriendRequest) do
		table.insert(tbUId, mapFriendInfo.nUId)
	end
	PlayerData.Friend:SendFriendInvitesDeleteReq(tbUId, callback)
end
function FriendRequestCtrl:OnBtnClick_Recommend()
	local callback = function(mapData)
		EventManager.Hit("FriendRecommend", mapData)
	end
	PlayerData.Friend:SendFriendRecommendationGetReq(callback)
end
function FriendRequestCtrl:OnEvent_ClearSearch()
	NovaAPI.SetTMPInputFieldText(self._mapNode.inputSearch, "")
end
return FriendRequestCtrl
