--[[ TrinketMenuOpt.lua : Options and sort window for TrinketMenu ]]

TrinketMenu.CheckOptInfo = {
{"ShowIcon","ON","미니맵 버튼","미니맵 버튼을 표시하거나 숨깁니다."},
{"SquareMinimap","OFF","사각형 미니맵 지원","사각형 미니맵의 테두리에 맞게 미니맵 버튼이 움직입니다.","ShowIcon"},
{"CooldownCount","OFF","재사용 대기시간 표시","장신구의 남은 재사용 대기시간을 표시합니다."},
{"TooltipFollow","OFF","마우스 커서 위치에 툴팁 표시","기본 위치 대신 마우스 커서의 위치에 툴팁을 표시합니다."},
{"KeepOpen","OFF","미착용 장신구 창 항상 표시","항상 미착용 장신구 창을 표시합니다."},
{"KeepDocked","ON","미착용 장신구 창 붙이기","착용한 장신구 창에 미착용 장신구 창을 항상 붙입니다."},
{"Notify","OFF","사용 준비 완료 알림","장신구의 재사용 대기시간이 사라질 때 메세지를 표시합니다."},
{"DisableToggle","OFF","켜고 끄기 기능 사용중지","미니맵 버튼을 클릭하여 장신구 관리자 창을 열고 닫는 기능을 사용하지 않습니다.","ShowIcon"},
{"NotifyChatAlso","OFF","채팅창에도 알림","채팅창에도 재사용 대기시간 만료 알림 메세지를 전송합니다."},
{"Locked","OFF","창 고정","창의 위치, 크기 및 정렬 방식 전환기능을 잠급니다."},
{"ShowTooltips","ON","툴팁 표시","장신구 및 설정 옵션의 툴팁을 표시합니다."},
{"NotifyThirty","ON","30초가 남았을 때 알림","장신구의 재사용 대기시간이 30초가 남았을 때 메세지를 전송합니다."},
{"MenuOnShift","OFF","쉬프트 키로 미착용 장신구 창 표시","쉬프트 키를 눌러야 미착용 장신구 창이 표시됩니다."},
{"TinyTooltips","OFF","간략한 툴팁","장신구 툴팁을 이름, 사용횟수, 재사용 대기시간으로 간략하게 표시합니다.","ShowTooltips"},
{"SetColumns","OFF","미착용 장신구 창 종렬 숫자 설정","미착용 장신구 창의 종 숫자를 설정합니다.\n\n체크하지 않으면 장신구 관리자가 임의대로 설정합니다."},
{"LargeCooldown","ON","숫자 크게 표시","재사용 대기시간의 숫자 크기를 크게 늘립니다.","CooldownCount"},
{"ShowHotKeys","ON","단축키 표시","착용한 장신구 창에 단축키를 표시합니다."},
{"StopOnSwap","OFF","교체 대기 중단","착용효과가 있는 장신구의 자동 교체 대기열을 중단시킵니다.  또한 사용효과 장신구를 수동으로 교체 대기열에 올려놓은 경우도 중단시킬 수 있습니다.  이 기능은 자주 사용하는 장신구에 주로 쓰일 것입니다."},
{"HideOnLoad","OFF","프로파일 로딩시 창 닫기","프로파일 로딩시 이 창을 표시하지 않습니다."},
{"RedRange","OFF","사정거리 바깥일 때 적색 표시","대상이 사정거리 바깥이라면 장신구를 붉은 색으로 표시하여 알립니다.   예, 노움 즉사광선과 노움 그물 발사기."},
{"MenuOnRight","OFF","우클릭으로 미사용 장신구 표시","이것을 체크하면 착용한 장신구를 우클릭 하기 전까지는 미사용 장신구 표시를 하지 않습니다.\n\n알림: 이 설정은 전투중에 변경할 수 없습니다."},
}

-- table.insert(TrinketMenu.CheckOptInfo,)

TrinketMenu.TooltipInfo = {
{"TrinketMenu_LockButton","창 고정","창의 위치, 크기 및 정렬 방식 전환기능을 잠급니다."},
{"TrinketMenu_Trinket0Check","첫번째 장신구 자동 대기","이 장신구 슬롯에 자동 대기 기능을 사용합니다.  장신구 슬롯에 알트+클릭으로 자동 대기기능을 켜고 끌 수 있습니다."},
{"TrinketMenu_Trinket1Check","두번째 장신구 자동 대기","이 장신구 슬롯에 자동 대기 기능을 사용합니다.  장신구 슬롯에 알트+클릭으로 자동 대기기능을 켜고 끌 수 있습니다."},
{"TrinketMenu_SortPriority","빠른 장신구 교환","설정시, 교환 가능한 때 재사용 대기시간 여부와는 관계없이 장신구가 바로 교체됩니다."},
{"TrinketMenu_SortDelay","교체 지연시간","장신구가 교체되기 전 대기 시간(초단위)을 부여합니다.  예, 대지의 격동 사용시 버프 효과 지속시간 20초간 장신구 교체를 막을 수 있습니다."},
{"TrinketMenu_SortKeepEquipped","대기열 일시정지","이 장신구를 착용하는 동안 자동 교체 대기열을 중단시킵니다. 예를들어, 당근 달린 지팡이를 자동 착용해주는 애드온을 사용한다면 이 기능을 사용해야 할 것입니다."},
{"TrinketMenu_Profiles","프로파일","로드 및 저장할 수 있는 자동 대기열 프로파일입니다."},
{"TrinketMenu_Delete","삭제","이 장신구를 목록에서 삭제합니다.  장신구가 목록 아래로 내려가는 것 이상은 전체적인 성능에 영향을 미치지 않습니다.  이 옵션은 단지 목록을 관리하기 위해 있는 것입니다. 알림: 가방의 장신구들은 목록의 마지막으로 돌아갈 것입니다."},
{"TrinketMenu_ProfilesDelete","프로파일 삭제","이 프로파일을 삭제합니다."},
{"TrinketMenu_ProfilesLoad","프로파일 로드","선택한 장신구 슬롯에 대기열 순서를 불러옵니다.  더블 클릭으로도 프로파일을 불러올 수 있습니다."},
{"TrinketMenu_ProfilesSave","프로파일 저장","선택한 장신구 슬롯에서 대기열 순서를 저장합니다.  한쪽의 장신구 슬롯으로도 프로파일 저장 기능을 사용할 수 있습니다."},
{"TrinketMenu_ProfileName","프로파일 이름","프로파일의 이름을 입력합니다.  저장했을 때, 이 프로파일을 한쪽의 장신구 슬롯에 불러올 수 있습니다."},
{"TrinketMenu_OptBindButton","장신구 단축키","첫번째, 두번째 장신구에 단축키를 설정합니다."}
}

function TrinketMenu.InitOptions()
	TrinketMenu.CreateTimer("DragMinimapButton",TrinketMenu.DragMinimapButton,0,1)
	TrinketMenu.MoveMinimapButton()
	local item
	for i=1,#(TrinketMenu.CheckOptInfo) do
		item = getglobal("TrinketMenu_Opt"..TrinketMenu.CheckOptInfo[i][1].."Text")
		if item then
			item:SetText(TrinketMenu.CheckOptInfo[i][3])
			item:SetTextColor(.95,.95,.95)
		end
	end
	TrinketMenu.Tab_OnClick(1)
	table.insert(UISpecialFrames,"TrinketMenu_OptFrame")
	TrinketMenu_Title:SetText("장신구 관리자 "..TrinketMenu_Version)

	TrinketMenu_OptFrame:SetBackdropBorderColor(.3,.3,.3,1)
	TrinketMenu_SubOptFrame:SetBackdropBorderColor(.3,.3,.3,1)
	if TrinketMenu.QueueInit then
		TrinketMenu.QueueInit()
		TrinketMenu_Tab1:Show()
		TrinketMenu_OptFrame:SetHeight(326)
		TrinketMenu_SubOptFrame:SetPoint("TOPLEFT",TrinketMenu_OptFrame,"TOPLEFT",8,-50)
	else
		TrinketMenu_OptStopOnSwap:Hide() -- remove StopOnSwap option if queue not loaded
		TrinketMenu_Tab1:Hide() -- hide options tab if it's only tab
		TrinketMenu_OptFrame:SetHeight(300)
		TrinketMenu_SubOptFrame:SetPoint("TOPLEFT",TrinketMenu_OptFrame,"TOPLEFT",8,-24)
	end
	TrinketMenu_OptColumnsSlider:SetValue(TrinketMenuOptions.Columns)
	TrinketMenu.ReflectLock()
	TrinketMenu.ReflectCooldownFont()
	TrinketMenu.KeyBindingsChanged()
end

function TrinketMenu.ToggleFrame(frame)
	if frame:IsVisible() then
		frame:Hide()
	else
		frame:Show()
	end
end

function TrinketMenu.OptFrame_OnShow()
	TrinketMenu.ValidateChecks()
	if TrinketMenu.CurrentlySorting then
		TrinketMenu.PopulateSort(TrinketMenu.CurrentlySorting)
	end
end

--[[ Minimap button ]]

function TrinketMenu.MoveMinimapButton()
	local xpos,ypos
	if TrinketMenuOptions.SquareMinimap=="ON" then
		xpos = 110 * cos(TrinketMenuOptions.IconPos or 0)
		ypos = 110 * sin(TrinketMenuOptions.IconPos or 0)
		xpos = math.max(-82,math.min(xpos,84))
		ypos = math.max(-86,math.min(ypos,82))
	else
		xpos = 80*cos(TrinketMenuOptions.IconPos or 0)
		ypos = 80*sin(TrinketMenuOptions.IconPos or 0)
	end
	TrinketMenu_IconFrame:SetPoint("TOPLEFT","Minimap","TOPLEFT",52-xpos,ypos-52)
	if TrinketMenuOptions.ShowIcon=="ON" then
		TrinketMenu_IconFrame:Show()
	else
		TrinketMenu_IconFrame:Hide()
	end
end

function TrinketMenu.DragMinimapButton()
	local xpos,ypos = GetCursorPosition()
	local xmin,ymin = Minimap:GetLeft() or 400, Minimap:GetBottom() or 400
	xpos = xmin-xpos/Minimap:GetEffectiveScale()+70
	ypos = ypos/Minimap:GetEffectiveScale()-ymin-70
	TrinketMenuOptions.IconPos = math.deg(math.atan2(ypos,xpos))
	TrinketMenu.MoveMinimapButton()
end

function TrinketMenu.MinimapButton_OnClick()
	PlaySound("GAMEGENERICBUTTONPRESS")
	if IsShiftKeyDown() then
		TrinketMenuOptions.Locked = TrinketMenuOptions.Locked=="ON" and "OFF" or "ON"
		TrinketMenu.ReflectLock()
	elseif IsAltKeyDown() and TrinketMenu.QueueInit then
		if arg1=="LeftButton" then
			TrinketMenuQueue.Enabled[0] = not TrinketMenuQueue.Enabled[0] and 1 or nil
		elseif arg1=="RightButton" then
			TrinketMenuQueue.Enabled[1] = not TrinketMenuQueue.Enabled[1] and 1 or nil
		end
		TrinketMenu.ReflectQueueEnabled()
		TrinketMenu.UpdateCombatQueue()
	else
		if arg1=="LeftButton" and TrinketMenuOptions.DisableToggle=="OFF" then
			TrinketMenu.ToggleFrame(TrinketMenu_MainFrame)
		else
			TrinketMenu.ToggleFrame(TrinketMenu_OptFrame)
		end
	end
end

--[[ CheckButton ]]

function TrinketMenu.ValidateChecks()
	local check,button
	for i=1,#(TrinketMenu.CheckOptInfo) do
		check = TrinketMenu.CheckOptInfo[i]
		button = getglobal("TrinketMenu_Opt"..check[1])
		if button then
			button:SetChecked(TrinketMenuOptions[check[1]]=="ON")
			if check[5] then
				if TrinketMenuOptions[check[5]]=="ON" then
					button:Enable()
					getglobal("TrinketMenu_Opt"..check[1].."Text"):SetTextColor(.95,.95,.95)
				else
					button:Disable()
					getglobal("TrinketMenu_Opt"..check[1].."Text"):SetTextColor(.5,.5,.5)
				end
			end
		end
	end
	TrinketMenu_OptColumnsSlider:SetAlpha((TrinketMenuOptions.SetColumns=="ON") and 1 or .5)
	TrinketMenu_OptColumnsSlider:EnableMouse((TrinketMenuOptions.SetColumns=="ON") and 1 or 0)
	TrinketMenu_OptColumnsSlider:SetValue(TrinketMenuOptions.Columns)
end

function TrinketMenu.OptColumnsSlider_OnValueChanged()
	if TrinketMenuOptions then
		TrinketMenuOptions.Columns = this:GetValue()
		TrinketMenu_OptColumnsSliderText:SetText("장신구 "..TrinketMenuOptions.Columns.."개")
		if TrinketMenu_MenuFrame:IsVisible() then
			TrinketMenu.BuildMenu()
		end
	end
end

function TrinketMenu.CheckButton_OnClick()
	local _,_,var = string.find(this:GetName(),"TrinketMenu_Opt(.+)")
	if TrinketMenuOptions[var] then
		TrinketMenuOptions[var] = this:GetChecked() and "ON" or "OFF"
		PlaySound(this:GetChecked() and "igMainMenuOptionCheckBoxOn" or "igMainMenuOptionCheckBoxOff")
		TrinketMenu.ValidateChecks()
	end

	if this==TrinketMenu_OptCooldownCount then
		TrinketMenu.WriteWornCooldowns()
		TrinketMenu.WriteMenuCooldowns()
	elseif this==TrinketMenu_OptLocked then
		TrinketMenu.DockWindows()
		TrinketMenu.ReflectLock()
	elseif this==TrinketMenu_OptKeepOpen or this==TrinketMenu_OptSetColumns then
		if TrinketMenuOptions.KeepOpen=="ON" then
			TrinketMenu.BuildMenu()
		end
	elseif this==TrinketMenu_OptKeepDocked then
		TrinketMenu.DockWindows()
	elseif this==TrinketMenu_OptLargeCooldown then
		TrinketMenu.ReflectCooldownFont()
	elseif this==TrinketMenu_OptSquareMinimap then
		TrinketMenu.MoveMinimapButton()
	elseif this==TrinketMenu_OptShowHotKeys then
		TrinketMenu.KeyBindingsChanged()
	elseif this==TrinketMenu_OptShowIcon then
		TrinketMenu.MoveMinimapButton()
	elseif this==TrinketMenu_OptRedRange then
		TrinketMenu.ReflectRedRange()
	elseif this==TrinketMenu_OptMenuOnRight then
		TrinketMenu.ReflectMenuOnRight()
	end
end

function TrinketMenu.ReflectLock()
	local c = TrinketMenuOptions.Locked=="ON" and 0 or .5
	TrinketMenu_OptFrame:SetBackdropBorderColor(c,c,c,1)
	TrinketMenu_MainFrame:SetBackdropColor(c,c,c,c)
	TrinketMenu_MainFrame:SetBackdropBorderColor(c,c,c,c*2)
	TrinketMenu_MenuFrame:SetBackdropColor(c,c,c,c)
	TrinketMenu_MenuFrame:SetBackdropBorderColor(c,c,c,c*2)
	TrinketMenu_MenuFrame:EnableMouse(c*2)
	TrinketMenu_OptLocked:SetChecked(1-c*2)
	local normalTexture = TrinketMenu_LockButton:GetNormalTexture()
	local pushedTexture = TrinketMenu_LockButton:GetPushedTexture()
	if c==0 then
		TrinketMenu_MainResizeButton:Hide()
		TrinketMenu_MenuResizeButton:Hide()
		normalTexture:SetTexCoord(.875,1,.125,.25)
		pushedTexture:SetTexCoord(.75,.875,.125,.25)
	else
		TrinketMenu_MainResizeButton:Show()
		TrinketMenu_MenuResizeButton:Show()
		normalTexture:SetTexCoord(.75,.875,.125,.25)
		pushedTexture:SetTexCoord(.875,1,.125,.25)
	end
end

function TrinketMenu.ReflectCooldownFont()
	TrinketMenu.SetCooldownFont("TrinketMenu_Trinket0")
	TrinketMenu.SetCooldownFont("TrinketMenu_Trinket1")
	for i=1,30 do
		TrinketMenu.SetCooldownFont("TrinketMenu_Menu"..i)
	end
end

function TrinketMenu.SetCooldownFont(button)
	local item = getglobal(button.."Time")
	if TrinketMenuOptions.LargeCooldown=="ON" then
		item:SetFont("Fonts\\2002.TTF",20,"OUTLINE")
		item:SetTextColor(1,.82,0,1)
		item:ClearAllPoints()
		item:SetPoint("CENTER",button,"CENTER")
	else
		item:SetFont("Fonts\\ARIALN.TTF",14,"OUTLINE")
		item:SetTextColor(1,1,1,1)
		item:ClearAllPoints()
		item:SetPoint("BOTTOM",button,"BOTTOM")
	end
end


--[[ Titlebar buttons ]]

function TrinketMenu.SmallButton_OnClick()
	PlaySound("igMainMenuOptionCheckBoxOn")
	if this==TrinketMenu_CloseButton then
		TrinketMenu_OptFrame:Hide()
	elseif this==TrinketMenu_LockButton then
		TrinketMenuOptions.Locked = (TrinketMenuOptions.Locked=="ON") and "OFF" or "ON"
		TrinketMenu.DockWindows()
		TrinketMenu.ReflectLock()
	end
end

--[[ Tabs ]]

function TrinketMenu.Tab_OnClick(override)
	PlaySound("GAMEGENERICBUTTONPRESS")
	local id = override or this:GetID()
	local tab
	if TrinketMenu_ProfilesFrame then
		TrinketMenu_ProfilesFrame:Hide()
	end
	for i=1,3 do
		tab = getglobal("TrinketMenu_Tab"..i)
		if tab then
			tab:UnlockHighlight()
		end
	end
	getglobal("TrinketMenu_Tab"..id):LockHighlight()
	if id==1 then
		TrinketMenu_SubOptFrame:Show()
		if TrinketMenu_SubQueueFrame then
			TrinketMenu_SubQueueFrame:Hide()
		end
	else
		TrinketMenu_SubOptFrame:Hide()
		TrinketMenu_SubQueueFrame:Show()
		TrinketMenu.OpenSort(3-this:GetID())
	end
end

function TrinketMenu.BindButton_OnClick()
	local bindings = {
		{"첫번째 장신구","CLICK TrinketMenu_Trinket0:LeftButton"},
		{"두번째 장신구","CLICK TrinketMenu_Trinket1:LeftButton"}
	}
	ClickBinder.Toggle("장신구 관리자",bindings,TrinketMenu_OptFrame)
end
