local IRF2 = InvenRaidFrames2
local Option = IRF2.optionFrame
local LBO = LibStub("LibBlueOption-1.0")

function Option:CreateUseMenu(menu, parent)
	local useList = { "항상", "파티", "공격대", "사용 안함" }
	menu.use = LBO:CreateWidget("DropDown", parent, "사용", "솔로잉이나 파티, 공격대 시 사용 여부를 설정합니다.", nil, nil, true,
		function() return IRF2.db.use, useList end,
		function(v)
			IRF2.db.use = v
			if v == "사용 안함" then
				IRF2.db.run = false
			else
				IRF2.db.run = true
				IRF2.db.shown = v
			end
			IRF2:Toggle()
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -5)
	local tooltipList = { "항상 표시", "비전투 중에만", "표시 안함" }
	menu.tooltip = LBO:CreateWidget("DropDown", parent, "툴팁 표시", "툴팁 표시 여부를 설정합니다.", nil, nil, nil,
		function() return IRF2.db.tooltip, tooltipList end,
		function(v) IRF2.db.tooltip = v end
	)
	menu.tooltip:SetPoint("TOPRIGHT", -5, -5)
	menu.lock = LBO:CreateWidget("CheckBox", parent, "창 고정", "공격대 프레임을 잠가 이동시키지 못하게 고정합니다.", nil, nil, nil,
		function() return IRF2.db.lock end,
		function(v) IRF2.db.lock = v end
	)
	menu.lock:SetPoint("TOP", menu.use, "BOTTOM", 0, -10)
	menu.showParty = LBO:CreateWidget("CheckBox", parent, "내 파티 표시", "공격대 참여시 자신이 속한 파티를 표시합니다.", nil, nil, true,
		function() return IRF2.db.groupOrder.showParty end,
		function(v)
			IRF2.db.groupOrder.showParty = v
			IRF2:SetGroupPosition()
		end
	)
	menu.showParty:SetPoint("TOP", menu.tooltip, "BOTTOM", 0, -10)
	menu.mapButtonToggle = LBO:CreateWidget("CheckBox", parent, "미니맵 버튼 표시", "미니맵 버튼을 표시합니다.", nil, nil, nil,
		function() return IRF2.baseDB.minimapButton.show end,
		function(v)
			IRF2.baseDB.minimapButton.show = v
			InvenRaidFrames2MapButton:Toggle()
			menu.mapButtonLock:Update()
		end
	)
	menu.mapButtonToggle:SetPoint("TOP", menu.lock, "BOTTOM", 0, 0)
	menu.mapButtonLock = LBO:CreateWidget("CheckBox", parent, "미니맵 버튼 고정", "미니맵 버튼를 고정합니다.", nil,
		function() return not IRF2.baseDB.minimapButton.show end, nil,
		function() return not IRF2.baseDB.minimapButton.dragable end,
		function(v)
			IRF2.baseDB.minimapButton.dragable = not v
		end
	)
	menu.mapButtonLock:SetPoint("TOP", menu.showParty, "BOTTOM", 0, 0)
	menu.clear = LBO:CreateWidget("Button", parent, "위치 초기화", "창의 위치를 초기화합니다.", nil, nil, true,
		function()
			IRF2.db.pos = { "CENTER", 0, 0 }
			IRF2.anchor:ClearAllPoints()
			IRF2.anchor:SetPoint("CENTER", UIParent, "CENTER")
			IRF2.db.pet.pos = { "CENTER", 0, 0 }
			if IRF2.group.pet then
				IRF2.petAnchor:ClearAllPoints()
				IRF2.petAnchor:SetPoint("CENTER", UIParent, "CENTER")
			end
		end
	)
	menu.clear:SetPoint("TOP", menu.mapButtonToggle, "BOTTOM", 0, 0)
	menu.version = LBO:CreateWidget("Button", parent, "버전 확인", "다른 파티 및 공격대원의 IRF2 버전을 확인합니다.", nil, nil, nil,
		function() IRF2:VersionCheck() end
	)
	menu.version:SetPoint("TOP", menu.mapButtonLock, "BOTTOM", 0, 0)
end

function Option:CreateGroupMenu(menu, parent)
	local groupOrderList = { "파티", "직업", "이름순" }
	local function getGroupOrder()
		if IRF2.db.groupOrder.byClass and not IRF2.db.groupOrder.byName then
			return 2
		elseif IRF2.db.groupOrder.byName and not IRF2.db.groupOrder.byClass then
			return 3
		else
			return 1
		end
	end
	menu.groupOrder = LBO:CreateWidget("DropDown", parent, "정렬 방식", "공격대 그룹을 파티나 직업별 혹은 이름순으로 정렬 합니다.", nil, nil, true,
		function() return groupOrderList[getGroupOrder()], groupOrderList end,
		function(v)
			if v == "직업" then
				IRF2.db.groupOrder.byClass = true
				IRF2.db.groupOrder.byName = false
			elseif v == "이름순" then
				IRF2.db.groupOrder.byClass = false
				IRF2.db.groupOrder.byName = true
			else
				IRF2.db.groupOrder.byClass = false
				IRF2.db.groupOrder.byName = false
			end
			IRF2:SetGroupPosition()
			IRF2:UpdatePartyTag()
			LBO:Refresh(parent)
		end
	)
	menu.groupOrder:SetPoint("TOPLEFT", 5, -5)
	menu.anchor = LBO:CreateWidget("DropDown", parent, "기준점", "공격대 인원들의 배치가 시작될 기준점을 설정합니다.", nil, nil, true,
		function() return IRF2.db.anchor, Option.dropdownTable["위치1"] end,
		function(v)
			IRF2.db.anchor = v
			for i = 0, 8 do
				IRF2.group[i].partyTag:ClearAllPoints()
				IRF2.group[i].partyTag1:ClearAllPoints()
				if IRF2.db.anchor == "좌측 상단" then
					IRF2.group[i].partyTag:SetPoint("BOTTOM", IRF2.group[i], "TOP", 0, 0)
					IRF2.group[i].partyTag1:SetPoint("RIGHT", IRF2.group[i], "LEFT", 0, 0)
				elseif IRF2.db.anchor == "우측 상단" then
					IRF2.group[i].partyTag:SetPoint("BOTTOM", IRF2.group[i], "TOP", 0, 0)
					IRF2.group[i].partyTag1:SetPoint("LEFT", IRF2.group[i], "RIGHT", 0, 0)
				elseif IRF2.db.anchor == "좌측 하단" then
					IRF2.group[i].partyTag:SetPoint("TOP", IRF2.group[i], "BOTTOM", 0, 0)
					IRF2.group[i].partyTag1:SetPoint("RIGHT", IRF2.group[i], "LEFT", 0, 0)
				elseif IRF2.db.anchor == "우측 하단" then
					IRF2.group[i].partyTag:SetPoint("TOP", IRF2.group[i], "BOTTOM", 0, 0)
					IRF2.group[i].partyTag1:SetPoint("LEFT", IRF2.group[i], "RIGHT", 0, 0)
				end
			end
			IRF2:UpdateClampRectInsets()
			IRF2:SetGroupPosition()
		end
	)
	menu.anchor:SetPoint("TOPRIGHT", -5, -5)
	-- 파티별 정렬
	local isNotParty = function() return getGroupOrder() ~= 1 end
	menu.partyPoint = LBO:CreateWidget("DropDown", parent, "파티원 배치 방향", "파티 내 파티원들이 가로나 세로로 배치되는 방향을 설정합니다.", isNotParty, nil, true,
		function() return IRF2.db.groupOrder.point, Option.dropdownTable["가로세로"] end,
		function(v)
			IRF2.db.groupOrder.point = v
			IRF2:SetGroupPosition()
			IRF2:CallbackTimer("Border", 0.1, IRF2, "UpdateBorder")
		end
	)
	menu.partyPoint:SetPoint("TOP", menu.groupOrder, "BOTTOM", 0, -10)
	local partyLimitList = { "5명", "10명", "15명", "20명", "25명", "40명" }
	menu.partyLimit = LBO:CreateWidget("DropDown", parent, "인원 표시 제한", "표시될 최대 인원 수를 설정합니다. 예를 들어 25명으로 설정하면 1~5파티만 보여집니다.", isNotParty, nil, true,
		function() return IRF2.db.limitMember, partyLimitList end,
		function(v)
			IRF2.db.limitMember = v
			IRF2:SetGroupPosition()
		end
	)
	menu.partyLimit:SetPoint("TOP", menu.anchor, "BOTTOM", 0, -10)
	menu.partyTag = LBO:CreateWidget("CheckBox", parent, "파티 이름표 보기", "공격대 각 그룹의 이름표를 표시합니다.", isNotParty, nil, true,
		function() return IRF2.db.partyTag end,
		function(v)
			IRF2.db.partyTag = v
			if not IRF2.db.groupOrder.byClass then
				IRF2:SetGroupPosition()
			end
		end
	)
	menu.partyTag:SetPoint("TOP", menu.partyPoint, "BOTTOM", 0, -10)
	menu.partyNum = LBO:CreateWidget("Slider", parent, "파티 수", "배치되는 방향의 피티 수를 설정합니다.", isNotParty, nil, true,
		function()
			return IRF2.db.groupOrder.nl, 1, 8, 1, "파티"
		end,
		function(v)
			IRF2.db.groupOrder.nl = v
			IRF2:SetGroupPosition()
		end
	)
	menu.partyNum:SetPoint("TOP", menu.partyLimit, "BOTTOM", 0, -10)
	menu.partyDir = LBO:CreateWidget("DropDown", parent, "파티 배치 방향", "각 파티 그룹이 배치될 방향을 설정합니다.", isNotParty, nil, true,
		function() return IRF2.db.groupOrder.dir, Option.dropdownTable["가로세로"] end,
		function(v)
			IRF2.db.groupOrder.dir = v
			IRF2:SetGroupPosition()
		end
	)
	menu.partyDir:SetPoint("TOP", menu.partyTag, "BOTTOM", 0, 0)
	menu.partySortName = LBO:CreateWidget("CheckBox", parent, "이름 순으로 정렬하기", "파티 안의 인원을 이름 순으로 정렬합니다.", isNotParty, nil, true,
		function() return not IRF2.db.groupOrder.sortIndex end,
		function(v)
			IRF2.db.groupOrder.sortIndex = not v
			IRF2:SetGroupPosition()
		end
	)
	menu.partySortName:SetPoint("TOP", menu.partyNum, "BOTTOM", 0, -10)
	-- 직업별/이름별 정렬
	local isNotClass = function() return getGroupOrder() ~= 2 end
	local isParty = function() return getGroupOrder() == 1 end
	menu.classPoint = LBO:CreateWidget("DropDown", parent, "인원 정렬 방향", "직업 인원들이 가로나 세로로 배치되는 방향을 설정합니다.", isParty, nil, true,
		function() return IRF2.db.groupOrder.point, Option.dropdownTable["가로세로"] end,
		function(v)
			IRF2.db.groupOrder.point = v
			IRF2:SetGroupPosition()
			IRF2:CallbackTimer("Border", 0.1, IRF2, "UpdateBorder")
		end
	)
	menu.classPoint:SetPoint("TOP", menu.groupOrder, "BOTTOM", 0, -10)
	menu.classNum = LBO:CreateWidget("Slider", parent, "인원 수", "직업 인원들이 한 줄에 표시될 인원 수를 설정합니다.", isParty, nil, true,
		function()
			return IRF2.db.groupOrder.cl, 1, 25, 1, "명"
		end,
		function(v)
			IRF2.db.groupOrder.cl = v
			IRF2:SetGroupPosition()
		end
	)
	menu.classNum:SetPoint("TOP", menu.anchor, "BOTTOM", 0, -10)
	local function getClassOrder(order)
		return IRF2.db.groupOrder.class[order], Option.dropdownTable["직업"]
	end
	local function setClassOrder(v, order)
		for j = 1, #IRF2.db.groupOrder.class do
			if IRF2.db.groupOrder.class[j] == v then
				IRF2.db.groupOrder.class[j] = IRF2.db.groupOrder.class[order]
				IRF2.db.groupOrder.class[order] = v
				menu["classOrder"..j]:Update()
				break
			end
		end
		InvenRaidFrames2:SetGroupPosition()
	end
	for i = 1, #Option.dropdownTable["직업"] do
		menu["classOrder"..i] = LBO:CreateWidget("DropDown", parent, i.." 순위", "직업별 배치 순서를 정합니다.", isNotClass, nil, true, getClassOrder, setClassOrder, i)
		menu["classOrder"..i]:SetPoint("TOP", i == 1 and menu.classPoint or (i == 2 and menu.classNum or menu["classOrder"..(i - 2)]), "BOTTOM", 0, -2)
	end
end

function Option:CreatePetMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "소환수 보기", "소환수 모듈을 사용합니다.", nil, nil, true,
		function() return IRF2.charDB.usePet end,
		function(v)
			IRF2.charDB.usePet = v
			if IRF2.group.pet then
				if v then
					IRF2:RegisterEvent("UNIT_PET")
					IRF2.group.pet:Show()
				else
					IRF2:UnregisterEvent("UNIT_PET")
					IRF2.group.pet:Hide()
				end
				IRF2:BorderPet()
			else
				IRF2:CreatePetGroup()
				IRF2:UNIT_PET()
			end
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -5)
	local isNotPet = function() return not IRF2.charDB.usePet end
	menu.scale = LBO:CreateWidget("Slider", parent, "크기", "소환수 프레임의 전체적인 크기를 설정합니다.", nil, isNotPet, true,
		function()
			return IRF2.db.pet.scale * 100, 50, 150, 1, "%"
		end,
		function(v)
			v = v / 100
			IRF2.db.pet.scale = v
			if IRF2.group.pet then
				IRF2.petAnchor:SetScale(v)
				IRF2.group.pet:SetScale(v)
			end
			if IRF2.borderFramePet then
				IRF2.borderFramePet:SetScale(v)
			end
		end
	)
	menu.scale:SetPoint("TOPRIGHT", -5, -5)
	menu.anchor = LBO:CreateWidget("DropDown", parent, "기준점", "소환수들의 배치가 시작될 기준점을 설정합니다.", nil, isNotPet, true,
		function() return IRF2.db.pet.anchor, Option.dropdownTable["위치1"] end,
		function(v)
			IRF2.db.pet.anchor = v
			if IRF2.group.pet then
				IRF2:SetPetGroupOrder()
				IRF2:UpdatePetClampRectInsets()
			end
		end
	)
	menu.anchor:SetPoint("TOP", menu.use, "BOTTOM", 0, -10)
	menu.column = LBO:CreateWidget("Slider", parent, "소환수 수", "한줄에 표시될 소환수 수를 설정합니다.", nil, isNotPet, true,
		function()
			return IRF2.db.pet.column, 1, 25, 1, ""
		end,
		function(v)
			IRF2.db.pet.column = v
			if IRF2.group.pet then
				IRF2:SetPetGroupOrder()
			end
		end
	)
	menu.column:SetPoint("TOP", menu.scale, "BOTTOM", 0, -10)
	menu.point = LBO:CreateWidget("DropDown", parent, "배치 방향", "소환수가 배치될 방향을 설정합니다.", nil, isNotPet, true,
		function() return IRF2.db.pet.point, Option.dropdownTable["가로세로"] end,
		function(v)
			IRF2.db.pet.point = v
			if IRF2.group.pet then
				IRF2:SetPetGroupOrder()
			end
		end
	)
	menu.point:SetPoint("TOP", menu.anchor, "BOTTOM", 0, -10)
end