-- main functions

module.getItems = function(assetId,plrId)
	local allItems = {}
	
	local success, errormsg = pcall(function()
		
		local done = false
		local nextPageCursor
		
		while done == false do
			
			local data
			
			if nextPageCursor then
				data = http:GetAsync("https://www.roproxy.com/users/inventory/list-json?assetTypeId="..tostring(assetId).."&cursor="..nextPageCursor.."&itemsPerPage=100&userId="..tostring(plrId))
			else
				data = http:GetAsync("https://www.roproxy.com/users/inventory/list-json?assetTypeId="..tostring(assetId).."&cursor=&itemsPerPage=100&userId="..tostring(plrId))
			end
			
			if data then
				data = http:JSONDecode(data)
				local items = data["Data"]["Items"]
				
				for _, item in pairs(items) do
					table.insert(allItems,item)
				end
				
				if data["Data"]["nextPageCursor"] then
					nextPageCursor = data["Data"]["nextPageCursor"]
					--print(nextPageCursor)
				else
					done = true
				end
			else
				warn("No data.")
			end
		end
	end)
	
	if success then
		print("Successfully retrieved data.")
	else
		warn(errormsg)
	end
	
	--print(tostring(#allItems).." items found.")
	
	--print("Finding items created by user...")
	
	local createdByUser = {}
	
	--print(allItems)
	
	for i, item in pairs(allItems) do
		pcall(function()
			if (item["Creator"]["Id"] == plrId) and (item["Product"]["IsForSale"] == true) then
				table.insert(createdByUser,item)
			end
		end)
	end
	
	--print(tostring(#createdByUser).." items remain.")
	
	--print(createdByUser)
	
	for _, item in pairs(createdByUser) do
		--print(item["Item"]["Name"],"-",item["Product"]["PriceInRobux"])
	end
	
	return createdByUser
end

module.loadItems = function(stand,plr)
	for _, frame in pairs(stand.Products.Items.ScrollingFrame:GetChildren()) do
		if frame:IsA("Frame") then
			frame:Destroy()
		end
	end
	
	local tshirts = module.getItems(module.assetTypeIds["T-Shirt"],plr.UserId)
	local passes = module.getItems(module.assetTypeIds["Pass"],plr.UserId)
	local shirts = module.getItems(module.assetTypeIds["Shirt"],plr.UserId)
	local pants = module.getItems(module.assetTypeIds["Pants"],plr.UserId)

	print(#tshirts,"T-Shirts found.")
	print(#shirts,"Shirts found.")
	print(#pants,"Pants found.")
	print(#passes,"Passes found.")

	local allItems = {}

	local tble = {tshirts,passes,shirts,pants}

	for _, itemType in pairs(tble) do
		for _, item in pairs(itemType) do
			table.insert(allItems,item)
		end
	end

	print("Total items found:",#allItems)
	
	print("Sorting items by price ascending...")
	
	table.sort(allItems, function(a, b)
		return a["Product"]["PriceInRobux"] < b["Product"]["PriceInRobux"]
	end)
	
	for _, item in pairs(allItems) do
		local frame = script.Template:Clone()
		frame.ItemID.Value = item["Item"]["AssetId"]
		frame.Cost.Value = item["Product"]["PriceInRobux"]
		frame.ItemTypeId.Value = item["Item"]["AssetType"]
		frame.RobuxCost.Text = "$"..tostring(item["Product"]["PriceInRobux"])
		frame.Parent = stand.Products.Items.ScrollingFrame
	end
end

module.clearStand = function(stand)
	print("Clearing stand...")
	stand.MessagePart.SurfaceGui.UserMessage.Text = "your text here"
	stand.Base.ClaimPrompt.Enabled = true
	stand.Base.ClaimedInfoDisplay.Enabled = false
	stand.Base.Unclaimed.Enabled = true
	stand.Claimed.Value = false
	stand.ClaimedUserName.Value = ""
	for _, frame in pairs(stand.Products.Items.ScrollingFrame:GetChildren()) do
		if frame:IsA("Frame") then
			frame:Destroy()
		end
	end
end

module.updateStandsEarned = function()
	for _, stand in pairs(game.Workspace.Stands:GetChildren()) do
		if stand.Claimed.Value == true then
			local plr = game.Players:FindFirstChild(stand.ClaimedUserName.Value)
			if plr then
				stand.Base.ClaimedInfoDisplay.UserRaised.Text = "R$"..tostring(plr.leaderstats.Recieved.Value).." Raised"
			else
				print("no player but claimed")
			end
		end
	end
end

module.findItem = function(itemID)
	for _, stand in pairs(game.Workspace.Stands:GetChildren()) do
		for _, frame in pairs(stand.Products.Items.ScrollingFrame:GetChildren()) do
			if frame:IsA("Frame") then
				if frame.ItemID.Value == itemID then
					return frame
				end
			end
		end
	end
end

return module