require(game.ReplicatedFirst.ReadyModule)
local optionFrame = script.Parent:WaitForChild("OptionFrame")
local options = optionFrame:WaitForChild("Options")
function registerToggle(name,callback)
	local button = options:WaitForChild(name)
	local value = button.TextButton.Text == "On"
	button.TextButton.MouseButton1Click:Connect(function()
		value = not value
		local new = "On"
		if not value then
			new = "Off"
		end
		button.TextButton.Text = new
		callback(value)
		_G.Events.Notification:Fire(name,new)
	end)
end
local function registerSlider(name,callback)
	local slider = options:WaitForChild(name)
	local drag = slider:WaitForChild("Slider"):WaitForChild("Drag")
	local etch = slider:WaitForChild("Slider"):WaitForChild("Etch")
	local hold
	local position
	local event
	local function changed(object)
		if hold then
			local delta = (object.Position - hold).X
			local final = math.clamp((delta/(etch.AbsoluteSize.X))+position,0,1)
			drag.Position = UDim2.new(final,0,0,0)
			callback(final)
		else
			event:Disconnect()
		end
	end
	drag.InputBegan:Connect(function(object)
		if object.UserInputType == Enum.UserInputType.MouseButton1 or object.UserInputType == Enum.UserInputType.Touch then
			hold = object.Position
			position = drag.Position.X.Scale
			event = _G.Input.InputChanged:Connect(changed)
		end
	end)
	drag.InputEnded:Connect(function(object)
		if object.UserInputType == Enum.UserInputType.MouseButton1 or object.UserInputType == Enum.UserInputType.Touch then
			hold = nil
			position = nil
		end
	end)
end
local collaborateButton = options:WaitForChild("CollaborateButton")
collaborateButton.MouseButton1Click:Connect(function()
	_G.Remotes.Collaborate:InvokeServer(nil,nil)
end)
registerSlider("Air",function(value)
	game.Workspace.CompensateDensity.Value = value * 2
end)
registerToggle("Destruction",function(value)
	game.Workspace.Destruction.Value = value
end)
registerToggle("Combat",function(value)
	game.Workspace.Combat.Value = value
	if value then
		_G.Remotes.Combat:InvokeServer()
	end
end)
registerToggle("Debug",function(value)
	game.Workspace.DebugWings.Value = value
end)
registerToggle("Stats",function(value)
	_G.StatisticsFrame.Visible = value
end)
registerSlider("Dead",function(value)
	local val = value > 0.5
	game.Lighting.ColorCorrection.Enabled = val 
	game.Lighting.ColorGrading.Enabled = val
end)
local defaultDensity = 0.262
local defaultBlur = 24
local changeFog = function(value)
	game.Lighting.Atmosphere.Density = defaultDensity*value
	game.Lighting.Blur.Size = defaultBlur*value
end
local changeTime = function(value)
	game.Lighting.Time.Value = value * 24
end
registerSlider("Fog",changeFog)
registerSlider("Time",changeTime)
--if _G.Statistics.fog_enabled then changeFog() options:WaitForChild("Fog").Text = "Off" end
local minimized = true
local toggle = _G:WaitFor("OptionsButton")
local extended = optionFrame.Position
local retracted = UDim2.new(UDim.new(0,-optionFrame.AbsoluteSize.X),extended.Y)
optionFrame.Position = retracted
optionFrame.Visible = true
local function toggleMenu()
	print("toggle")
	minimized = not minimized
	optionFrame.Visible = not minimized
	--[[local new
	if minimized then
		new = retracted
	else
		new = extended
	end
	optionFrame:TweenPosition(new,Enum.EasingDirection.InOut,Enum.EasingStyle.Quad,0.4,true)]]
end
toggle.Activated:Connect(toggleMenu)
local input = game:GetService("UserInputService")
input.InputBegan:Connect(function(input,irrelevant)
	if not irrelevant and input.KeyCode == Enum.KeyCode.Backquote then
		if input:IsModifierKeyDown(Enum.ModifierKey.Shift) then
			minimized = true
			optionFrame.Visible = false
			optionFrame.Options.Command.CommandBox:ReleaseFocus()
		else
			minimized = false
			optionFrame.Visible = true
			wait() optionFrame.Options.Command.CommandBox:CaptureFocus()
		end
	end
end)

--game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat,false)
local messageFrame = script.Parent:WaitForChild("MessageFrame")
local messageBox = messageFrame:WaitForChild("TextBox")
local messageContainer = messageFrame:WaitForChild("ScrollingFrame")
_G.Remotes.Chat.OnClientEvent:Connect(function(title,content,color)
	local message = messageContainer.Template.Message:Clone()
	message.Parent = messageContainer
	message.Title.Text = title
	message.Content.Text = content
	message.Title.TextColor3 = color
	message.Visible = true
	messageContainer.CanvasPosition = Vector2.new(0, messageContainer.CanvasSize.Y.Offset - messageContainer.AbsoluteSize.Y)
end)
_G.Input.InputBegan:Connect(function(input,irrelevant)
	if not irrelevant and input.KeyCode == Enum.KeyCode.Slash then
		messageBox:CaptureFocus()
	end
end)
_G:WaitFor("ChatHideButton").Activated:Connect(function()
	messageFrame.Visible = not messageFrame.Visible
end)
messageBox.FocusLost:Connect(function(enterPressed)
	if enterPressed then
		local message = messageBox.Text
		:gsub("\n","<br/>")
		:gsub("<br>","<br/>")
		:gsub("<big>(.-)</big>","<font size=\"28\">%1</font>")
		:gsub("<small>(.-)</small>","<font size=\"10\">%1</font>")
		:gsub("<green>(.-)</green>","<font color=\"#00FF00\">%1</font>")
		:gsub("<red>(.-)</red>","<font color=\"#FF0000\">%1</font>")
		:gsub("<trans.->(.-)</trans.->","<font transparency=\"0.5\">%1</font>")
		:gsub("_(.-)_","<i>%1</i>")
		:gsub("*(.-)*","<b>%1</b>")
		if #message == 0 then return end
		_G.Remotes.Chat:FireServer(message)
		messageBox.Text = ""
	end
end)