
local CoreGui = Game:GetService("CoreGui")
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
local Modules = GuiRoot:FindFirstChild("Modules")
local ShellModules = Modules:FindFirstChild("Shell")

local Utility = require(ShellModules:FindFirstChild('Utility'))
local GlobalSettings = require(ShellModules:FindFirstChild('GlobalSettings'))
local SoundManager = require(ShellModules:FindFirstChild('SoundManager'))
local Strings = require(ShellModules:FindFirstChild('LocalizedStrings'))

local function LockedGameCarouselView()
	local this = {}

	local overlayFrames = {}

	local container = Utility.Create'Frame'
	{
		Name = "LockedViewContainer";
		Size = UDim2.new(1, 0, 1, 0);
		BackgroundTransparency = 0.2;
		BackgroundColor3 = Color3.new(0.1, 0.1, 0.1);
		BorderSizePixel = 0;
		Selectable = false;
		SoundManager:CreateSound('MoveSelection');
	}
	local lockedTextLabel = Utility.Create'TextLabel'
	{
		Name = "LockedTextLabel";
		Size = UDim2.new(0.7, 0, 0.5, 0);
		Position = UDim2.new(0.125, 0, 0.25, 0);
		BackgroundTransparency = 1;
		Font = GlobalSettings.LightFont;
		FontSize = GlobalSettings.ButtonSize;
		TextXAlignment = Enum.TextXAlignment.Left;
		TextYAlignment = Enum.TextYAlignment.Center;
		TextColor3 = GlobalSettings.WhiteTextColor;
		Text = Strings:LocalizedString("UnlockGamesPhrase");
		TextWrapped = true;
		Parent = container;
	}
	local lockIcon = Utility.Create'ImageLabel'
	{
		Name = "LockLabel";
		Position = UDim2.new(0, 50, 0.5, -70);
		Size = UDim2.new(0, 116, 0, 140);
		BackgroundTransparency = 1;
		Image = 'rbxasset://textures/ui/Shell/Icons/LockIcon.png';
		Parent = container;
	}

	--[[ Public API ]]--
	function this:SetParent(newParent)
		container.Parent = newParent
	end

	function this:SetSize(newSize)
		container.Size = newSize
	end

	function this:SetPosition(newPosition)
		container.Position = newPosition
	end

	function this:GetContainer()
		return container
	end

	function this:SetSelectionImageObject(guiObject)
		container.SelectionImageObject = guiObject
	end

	function setProperty(instance, propName, val)
		pcall(function(i, p, v) i[p] = v end, instance, propName, val)
	end

	local function setZIndexHelper(element, val)
		setProperty(element, "ZIndex", val)

		local children = element:GetChildren()
		for i = 1, #children do
			local child = children[i]
			setZIndexHelper(child, val)
		end
	end

	function this:SetZIndex(val)
		setZIndexHelper(container, val)
	end

	function this:GetSelection()
		return container
	end

	function this:CreateLockedIconOverlay(iconImage)
		local overlayFrame = Utility.Create'Frame'
		{
			Name = "LockedOverlay";
			Size = UDim2.new(1, 0, 1, 0);
			BackgroundTransparency = GlobalSettings.ModalBackgroundTransparency;
			BackgroundColor3 = GlobalSettings.ModalBackgroundColor;
			BorderSizePixel = 0;
			Parent = iconImage;
		}
		table.insert(overlayFrames, overlayFrame)
	end
	function this:RemoveLockedIconOverlays()
		for i = 1, #overlayFrames do
			overlayFrames[i].Parent = nil
		end
	end

	return this
end

return LockedGameCarouselView
