-- Table setup containing product IDs and functions for handling purchases
local productFunctions = {
	[1527684360] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 5
			return true
		end
	end;
	
	[1527684736] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 10
			return true
		end
	end;
	
	[1527684772] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 15
			return true
		end
	end;
	
	[1527684906] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 25
			return true
		end
	end;
	
	[1527684963] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 50
			return true
		end
	end;
	
	[1527685101] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 75
			return true
		end
	end;
	
	[1527685172] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 100
			return true
		end
	end;
	
	[1527685229] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 250
			return true
		end
	end;
	
	[1527685281] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 500
			return true
		end
	end;
	
	[1527685476] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 1000
			return true
		end
	end;
	
	[1527685554] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 2500
			return true
		end
	end;
	
	[1527685603] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 5000
			return true
		end
	end;
	
	[1527685835] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 10000
			return true
		end
	end;
	
	[1527685970] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 25000
			return true
		end
	end;
	
	[1527689815] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 50000
			return true
		end
	end;
	
	[1527686109] = function(receipt, player)
		local stats = player:FindFirstChild("DonationValue")
		local donation = stats
		if donation then
			donation.Value = donation.Value + 100000
			return true
		end
	end;
	
}


MarketplaceService.ProcessReceipt = function(receiptInfo)
	local playerProductKey = receiptInfo.PlayerId .. "_" .. receiptInfo.PurchaseId
	local purchased = false
	local success, errorMessage = pcall(function()
		purchased = purchaseHistoryStore:GetAsync(playerProductKey)
	end)

	if success and purchased then
		return Enum.ProductPurchaseDecision.PurchaseGranted
	elseif not success then
		error("Data store error:" .. errorMessage)
	end


	local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
	if not player then
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end


	local handler = productFunctions[receiptInfo.ProductId]

	local success, result = pcall(handler, receiptInfo, player)
	if not success or not result then
		warn("Error occurred while processing a product purchase")
		print("\nProductId:", receiptInfo.ProductId)
		print("\nPlayer:", player)
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end


	local success, errorMessage = pcall(function()
		purchaseHistoryStore:SetAsync(playerProductKey, true)
	end)
	if not success then
		error("Cannot save purchase data: " .. errorMessage)
	end


	return Enum.ProductPurchaseDecision.PurchaseGranted
end