FunctionSecurity = class("FunctionSecurity")
autoImport("SecurityPanel")
-- 交易所 上架，購買
function FunctionSecurity.Me()
	if nil == FunctionSecurity.me then
		FunctionSecurity.me = FunctionSecurity.new()
	end
	return FunctionSecurity.me
end

function FunctionSecurity:ctor( )
	self.verifySecuriySus = false
	self.verifySecuriyCode = nil
	self.verifySecuriyResettime = nil
	self.verifySecuriyhasSet= false
end

function FunctionSecurity:ctor( )
	self.verifySecuriySus = false
	self.verifySecuriyCode = nil
	self.verifySecuriyResettime = nil
	self.verifySecuriyhasSet= false
end

function FunctionSecurity:resetTimeTick()
	if(not ServerTime.CurServerTime())then
		return
	end
	local resetTime = self.verifySecuriyResettime
	local leftTime = resetTime - ServerTime.CurServerTime()/1000
	if(leftTime <= 0)then
		TimeTickManager.Me():ClearTick(self)
		ServiceLoginUserCmdProxy.Instance:CallConfirmAuthorizeUserCmd(self.verifySecuriyCode)
	end
end

function FunctionSecurity:RecvAuthorizeInfo(data)
	TimeTickManager.Me():ClearTick(self)
	self.verifySecuriySus = data.success
	self.verifySecuriyhasSet = data.hasset
	if(not self.verifySecuriyResettime and data.resettime > 0)then
		MsgManager.ShowMsgByIDTable(6010)
	end
	self.verifySecuriyResettime = data.resettime
	if(data.resettime > 0)then
		TimeTickManager.Me():CreateTick(0,1000*5,self.resetTimeTick,self)
	end
end

function FunctionSecurity:Exchange_SellOrBuyItem( callback,arg)	--
	self:NormalOperation(callback,arg)
end

--使用特定物品
function FunctionSecurity:UseItem( callback,arg)
	if(arg and arg.itemData)then
		local staticData = arg.itemData.staticData
		local Feature = staticData.Feature
		if(Feature and (8 & Feature >0))then
			self:TryVerifySecurity(callback,arg)
			return
		end
	end
	callback(arg)
end

-- 玩家在商店界面販賣可交易物品的道具，出售將觸發安全密碼
function FunctionSecurity:SellItem_Shop( callback,arg )
	if(arg and arg.stDatas and #arg.stDatas>0)then
		for i=1,#arg.stDatas do
			local staticData = arg.stDatas[i]
			local Feature = staticData.Feature
			if(not Feature or (4 & Feature == 0))then
				self:TryVerifySecurity(callback,arg)
				return
			end
		end
	end
	callback(arg)
end

-- 玩家在NPC處購買道具時觸發
function FunctionSecurity:BuyItem_Npc( callback,arg )
	self:NormalOperation(callback,arg)
end

--精煉
function FunctionSecurity:RefineEquip(callback,arg )
	if(arg and arg.itemData)then
		local itemData = arg.itemData
		local param = Table_SecuritySetting[1].param
		local lv = param and param[1] or 0
		if(itemData.equipInfo and itemData.equipInfo.refinelv >= lv)then
			self:TryVerifySecurity(callback,arg)
			return
		end
	end

	callback(arg)
end

-- 交易所 贈送
function FunctionSecurity:Exchange_Give( callback ,arg)
	self:NormalOperation(callback,arg)
end

--刪除好友
function FunctionSecurity:DeleteFriend( callback ,arg)
	self:NormalOperation(callback,arg)
end

--工會相關
function FunctionSecurity:GuildControl( callback ,arg)
	self:NormalOperation(callback,arg)
end

--裝備升級
function FunctionSecurity:LevelUpEquip( callback ,arg)
	self:NormalOperation(callback,arg)
end

-- 兌換碼
function FunctionSecurity:RedeemCode(callback,arg)
	self:NormalOperation(callback,arg)
end

--裝備打孔
function FunctionSecurity:HoleEquip( callback ,arg)
	self:NormalOperation(callback,arg)
end

--裝備附魔
function FunctionSecurity:EnchantingEquip( callback ,arg)
	self:NormalOperation(callback,arg)
end

--角色刪除
function FunctionSecurity:RoleDelete( callback ,arg)
	self:NormalOperation(callback,arg)
end

--通用安全验证
function FunctionSecurity:NormalOperation( callback ,arg)
	self:TryVerifySecurity(callback,arg)
end

function FunctionSecurity:TryVerifySecurity( callback,arg )
    -- body
    local hasSet = self.verifySecuriyhasSet
    local sus = self.verifySecuriySus
    if(hasSet and not sus)then
        self:ShowVerifySecurity( callback,arg)
    else
        if(callback)then
            callback(arg)
        end
    end
end

function FunctionSecurity:ShowVerifySecurity( callback,arg )
    -- body
	GameFacade.Instance:sendNotification(UIEvent.JumpPanel,{view = PanelConfig.SecurityPanel,viewdata = {ActionType = SecurityPanel.ActionType.Confirm,data = {callback = callback,arg = arg}}})
end

function FunctionSecurity:NeedDoRealNameCentify()
	--local login_site = FunctionLogin.Me():getLoginSite()
	--login_site = login_site and tonumber(login_site) or 1;

	-- 只有心動賬號才進行驗證
	--if(login_site ~= 1)then
	--	return false;
	--end

	--local realName_Centified = FunctionLogin.Me():get_realName_Centified();

	-- if(realName_Centified)then
	-- 	return false;
	-- end

	-- return true;
	return false;
end

function FunctionSecurity:TryDoRealNameCentify( callback,callbackParam )
	if(not self:NeedDoRealNameCentify())then
		if(callback)then
			callback(callbackParam);
		end
		return;
	end

	local viewdata = {
		callback = callback,
		callbackParam = callbackParam,
	};
	GameFacade.Instance:sendNotification(UIEvent.JumpPanel, { view = PanelConfig.RealNameCentifyView, viewdata = viewdata })
end