Function always returns nil when attempting to retrieve trading data

Hello, I am writing a trading system for my game, however, I have come to a problem, whenever I attempt to retrieve the Trade data from a table, it always returns nil, no matter what. I tried using dictionaries before this but that didn’t work., I would be very grateful if someone can help me with my problem.

Fires a RemoteEvent to the server to add an item:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Events = ReplicatedStorage:WaitForChild("Events")
local TradeEvent = Events:WaitForChild("TradeEvent")
local TradeId = script.Parent.Parent.Parent:WaitForChild("TradeId")

script.Parent.MouseButton1Click:Connect(function()
	TradeEvent:FireServer("AddItem",game.Players.LocalPlayer,script.Parent.Name,TradeId.Value)
end)

Server Code:

local OngoingTrades = {}
--[[
	Trade Template:
	{
	[TradeId] = 1;
	[Player1] = "Player Name";
	[Player2] = "Player Name";
	[Player1ItemTrades] = {
	  {ItemName,Amount};
	};
	[Player2ItemTrades] = {
	  {ItemName,Amount};
	}
]]
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Events = ReplicatedStorage:WaitForChild("Events")
local TradeEvent = Events:WaitForChild("TradeEvent")

local function GetTrade(TradeId)
	for _,Trade in pairs(OngoingTrades) do
		print(Trade)
		if Trade[1] == TradeId then
			print(Trade[1])
			return Trade
		end
	end
end

local function AddItem(Player,AddItem,TradeId)
	local Data = Player:WaitForChild("Data")
	local PlayerSkins = Data:WaitForChild("PlayerSkins")
	if PlayerSkins:FindFirstChild(AddItem) then
		local Trade = GetTrade(TradeId)
		if Trade[2] == Player then -- The problem area.
			local TradeItems = Trade[4]
			if #TradeItems < 5 then
				local HasItem = false
				local SkinCount = 0
				for _,Skin in pairs(PlayerSkins) do
					if Skin.Name == AddItem then
						SkinCount = SkinCount+1
					end
				end
				for I,Item in pairs(TradeItems) do
					if Item[1] == AddItem.Name then
						if Item[2] < SkinCount then
							Item[2] = Item[2]+1
							HasItem = true
							Trade[4] = TradeItems
							break
						end
					end
				end
				if HasItem == false then
					local ItemData = {
						AddItem.Name,1
					}
					table.insert(TradeItems,#TradeItems+1,ItemData)
					Trade[4] = TradeItems
				end
				TradeEvent:FireClient(Player,"UpdateTrade",Trade)
				TradeEvent:FireClient(Trade[3],"UpdateTrade",Trade)
			end
		elseif Trade[3] == Player then
			local TradeItems = Trade[5]
			if #TradeItems < 5 then
				local HasItem = false
				local SkinCount = 0
				for _,Skin in pairs(PlayerSkins) do
					if Skin.Name == AddItem then
						SkinCount = SkinCount+1
					end
				end
				for I,Item in pairs(TradeItems) do
					if Item[1] == AddItem.Name then
						if Item[2] < SkinCount then
							Item[2] = Item[2]+1
							HasItem = true
							Trade[5] = TradeItems
							break
						end
					end
				end
				if HasItem == false then
					local ItemData = {
						AddItem.Name,1
					}
					table.insert(TradeItems,#TradeItems+1,ItemData)
					Trade[5] = TradeItems
				end
				TradeEvent:FireClient(Player,"UpdateTrade",Trade)
				TradeEvent:FireClient(Trade[2],"UpdateTrade",Trade)
			end
		end
	end
end

local function RemoveItem(Player,RemoveItem,TradeId)
	print("removing")
	local Trade = GetTrade(TradeId)
	if Trade[2] == Player then
		local Trades = Trade[4]
		for Index,Item in pairs(Trades) do
			if Item[1] == RemoveItem then
				table.remove(Trades,Index)
			end
		end
	end
	if Trade[3] == Player then
		local Trades = Trade[5]
		for Index,Item in pairs(Trades) do
			if Item[1] == RemoveItem then
				table.remove(Trades,Index)
			end
		end
	end
	TradeEvent:FireClient(Player,"UpdateTrade",Trade)
	TradeEvent:FireClient(Trade[3],"UpdateTrade",Trade)
	print("removed")

end

local function CreateTrade(TradePlayer1,TradePlayer2)
	local TradeData = {}
	table.insert(TradeData,1,math.random(1,9999999))
	table.insert(TradeData,2,TradePlayer1)
	table.insert(TradeData,3,TradePlayer2)
	table.insert(TradeData,4,{})
	table.insert(TradeData,5,{})
	table.insert(OngoingTrades,#OngoingTrades+1,TradeData)
	TradeEvent:FireClient(TradePlayer1,"UpdateTrade",TradeData)
	TradeEvent:FireClient(TradePlayer2,"UpdateTrade",TradeData)
end

TradeEvent.OnServerEvent:Connect(function(Player,Type,arg1,arg2,arg3)
	if Type == "AddItem" then
		AddItem(arg1,arg2,arg3)
	end
	if Type == "RemoveItem" then
		RemoveItem(arg1,arg2,arg3)
	end
	if Type == "CreateTrade" then
		CreateTrade(arg1,arg2)
	end
end)


repeat wait() until game.Players:FindFirstChild("Player1") 

repeat wait() until game.Players:FindFirstChild("Player2") 

CreateTrade(game.Players:FindFirstChild("Player1"),game.Players:FindFirstChild("Player2"))