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

local _G = _G
local pairs = _G.pairs
local ipairs = _G.ipairs
local unpack = _G.unpack
local tonumber = _G.tonumber
local ceil = _G.math.ceil

function Option:CreateAggroMenu(menu, parent)
	menu.arrow = LBO:CreateWidget("CheckBox", parent, "어그로 화살표 보기", "어그로를 획득한 플레이어의 이름 왼쪽에 붉은색 화살표를 표시합니다.", nil, nil, nil,
		function()
			return IRF2.db.layout.showAggro
		end,
		function(v)
			IRF2.db.layout.showAggro = v
			for _, object in pairs(IRF2.units) do
				object:UpdateText()
			end
		end
	)
	menu.arrow:SetPoint("TOPLEFT", 5, 5)
	menu.gain = LBO:CreateWidget("Media", parent, "어그로 획득 시 소리", "자신이 어그로를 획득 했을때 소리를 재생합니다. None으로 설정하시면 소리 재생 기능을 사용하지 않습니다.", nil, nil, nil,
		function()
			return IRF2.charDB.sound.aggroGain, "sound"
		end,
		function(v)
			IRF2.charDB.sound.aggroGain = v
		end
	)
	menu.gain:SetPoint("TOPLEFT", 5, -50)
	menu.lost = LBO:CreateWidget("Media", parent, "어그로 손실 시 소리", "자신이 어그로를 잃었을때 소리를 재생합니다. None으로 설정하시면 소리 재생 기능을 사용하지 않습니다.", nil, nil, nil,
		function()
			return IRF2.charDB.sound.aggroLost, "sound"
		end,
		function(v)
			IRF2.charDB.sound.aggroLost = v
		end
	)
	menu.lost:SetPoint("TOPRIGHT", -5, -50)
	local useList = { "사용 안함", "항상", "파티/공격대", "공격대" }
	menu.use = LBO:CreateWidget("DropDown", parent, "소리 재생 조건", "어그로 획득/손실 시 소리를 재생할 조건을 설정합니다.", nil, nil, nil,
		function()
			return IRF2.charDB.aggroSound, useList
		end,
		function(v)
			IRF2.charDB.aggroSound = v
		end
	)
	menu.use:SetPoint("TOP", menu.gain, "BOTTOM", 0, -10)
end

function Option:CreateOutlineMenu(menu, parent)
	local function update()
		for _, object in pairs(IRF2.units) do
			object:UpdateOutline()
		end
	end
	local outlineList = { "디버프", "어그로", "대상", "마우스 오버", "체력 저하", "전술 목표", "사용 안함" }
	menu.use = LBO:CreateWidget("DropDown", parent, "외곽선 동작", "각 공격대원 프레임의 주위에 있는 외곽선의 기능을 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.outline, outlineList
		end,
		function(v)
			IRF2.db.outline = v
			if v == "대상" then
				IRF2:RegisterEvent("PLAYER_TARGET_CHANGED")
			else
				IRF2:UnregisterEvent("PLAYER_TARGET_CHANGED")
			end
			update()
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -5)
	-- 디버프
	local isNotDebuff = function() return IRF2.db.outline ~= "디버프" end
	local getDebuff = function(debuff) return IRF2.charDB.dispel[debuff] end
	local setDebuff = function(v, debuff)
		IRF2.charDB.dispel[debuff] = v
		update()
	end
	for i, debuff in ipairs(self.dropdownTable["디버프"]) do
		menu["debuff"..i] = LBO:CreateWidget("CheckBox", parent, debuff.." 보기", debuff.." 계열의 디버프를 표시합니다.", isNotDebuff, nil, nil, getDebuff, setDebuff, self.dropdownTable["디버프영문"][i])
		if i == 1 then
			menu["debuff"..i]:SetPoint("TOPLEFT", 5, -50)
		elseif i == 2 then
			menu["debuff"..i]:SetPoint("TOPRIGHT", -5, -50)
		else
			menu["debuff"..i]:SetPoint("TOP", menu["debuff"..(i - 2)], "BOTTOM", 0, 10)
		end
	end
	-- 어그로
	menu.aggro = LBO:CreateWidget("ColorPicker", parent, "외곽선 색상", "어그로 획득 시 표시될 외곽선의 색상을 설정합니다.", function() return IRF2.db.outline ~= "어그로" end, nil, nil,
		function()
			return unpack(IRF2.db.outlineAggroColor)
		end,
		function(r, g, b)
			IRF2.db.outlineAggroColor[1], IRF2.db.outlineAggroColor[2], IRF2.db.outlineAggroColor[3] = r, g, b
			update()
		end
	)
	menu.aggro:SetPoint("TOPLEFT", 5, -50)
	-- 대상
	menu.target = LBO:CreateWidget("ColorPicker", parent, "외곽선 색상", "공격대원이 대상으로 선택되었을 때의 외곽선 색상을 설정합니다.", function() return IRF2.db.outline ~= "대상" end, nil, nil,
		function()
			return unpack(IRF2.db.outlineTarget)
		end,
		function(r, g, b)
			IRF2.db.outlineTarget[1], IRF2.db.outlineTarget[2], IRF2.db.outlineTarget[3] = r, g, b
			update()
		end
	)
	menu.target:SetPoint("TOPLEFT", 5, -50)
	-- 마우스 오버
	menu.mouseover = LBO:CreateWidget("ColorPicker", parent, "외곽선 색상", "공격대 프레임에 마우스를 올렸을 때의 외곽선 색상을 설정합니다.", function() return IRF2.db.outline ~= "마우스 오버" end, nil, nil,
		function()
			return unpack(IRF2.db.outlineMouseOver)
		end,
		function(r, g, b)
			IRF2.db.outlineMouseOver[1], IRF2.db.outlineMouseOver[2], IRF2.db.outlineMouseOver[3] = r, g, b
			update()
		end
	)
	menu.mouseover:SetPoint("TOPLEFT", 5, -50)
	-- 체력 저하
	local isNotLowHealth = function() return IRF2.db.outline ~= "체력 저하" end
	menu.lowHealth = LBO:CreateWidget("ColorPicker", parent, "외곽선 색상", "공격대원의 체력이 지정한 퍼센트 이하로 떨어졌을 때의 외곽선 색상을 설정합니다.", isNotLowHealth, nil, nil,
		function()
			return unpack(IRF2.db.outlineLowHealth.color)
		end,
		function(r, g, b)
			IRF2.db.outlineLowHealth.color[1], IRF2.db.outlineLowHealth.color[2], IRF2.db.outlineLowHealth.color[3] = r, g, b
			update()
		end
	)
	menu.lowHealth:SetPoint("TOPLEFT", 5, -50)
	menu.lowHealthValue = LBO:CreateWidget("Slider", parent, "체력 저하 경고 체력량", "지정한 퍼센트 이하로 체력이 떨어지면 외곽선을 표시합니다.", isNotLowHealth, nil, nil,
		function()
			return IRF2.db.outlineLowHealth.value * 100, 1, 99, 1, "%"
		end,
		function(v)
			IRF2.db.outlineLowHealth.value = v / 100
			update()
		end
	)
	menu.lowHealthValue:SetPoint("TOPRIGHT", -5, -50)
	-- 전술 목표
	local isNotRaidTarget = function() return IRF2.db.outline ~= "전술 목표" end
	menu.raidTarget = LBO:CreateWidget("ColorPicker", parent, "외곽선 색상", "공격대원의 전술 목표가 지정한 것으로 되었을 때의 외곽선 색상을 설정합니다.", isNotRaidTarget, nil, nil,
		function()
			return unpack(IRF2.db.outlineRaidIcon.color)
		end,
		function(r, g, b)
			IRF2.db.outlineRaidIcon.color[1], IRF2.db.outlineRaidIcon.color[2], IRF2.db.outlineRaidIcon.color[3] = r, g, b
			update()
		end
	)
	menu.raidTarget:SetPoint("TOPLEFT", 5, -50)
	local getRaidTarget = function(rt) return not IRF2.db.outlineRaidIcon.skip[rt] end
	local setRaidTarget = function(v, rt)
		IRF2.db.outlineRaidIcon.skip[rt] = not v
		update()
	end
	for i = 1, 8 do
		menu["raidTarget"..i] = LBO:CreateWidget("CheckBox", parent, self.dropdownTable["징표"][i], self.dropdownTable["징표"][i].."에 외곽선을 표시합니다.", isNotRaidTarget, nil, nil, getRaidTarget, setRaidTarget, i)
		if i == 1 then
			menu["raidTarget"..i]:SetPoint("TOPLEFT", 5, -85)
		elseif i == 2 then
			menu["raidTarget"..i]:SetPoint("TOPRIGHT", -5, -85)
		else
			menu["raidTarget"..i]:SetPoint("TOP", menu["raidTarget"..(i - 2)], "BOTTOM", 0, 10)
		end
	end
end

function Option:CreateRangeMenu(menu, parent)
	menu.outrange = LBO:CreateWidget("Slider", parent, "사정 거리 밖 투명도", "사정 거리가 벗어난 플레이어의 체력바 투명도를 조절합니다.", nil, nil, nil,
		function()
			return IRF2.db.layout.outRangeAlpha * 100, 0, 100, 1, "%"
		end,
		function(v)
			IRF2.db.layout.outRangeAlpha = v / 100
			for _, object in pairs(IRF2.units) do
				if not object.inRange then
					object.health:SetAlpha(IRF2.db.layout.outRangeAlpha)
					if IRF2.db.layout.outRangeAlphaMana then
						object.mana:SetAlpha(IRF2.db.layout.outRangeAlpha)
					else
						object.mana:SetAlpha(1)
					end
					if IRF2.db.layout.outRangeAlphaName then
						object.text:SetAlpha(IRF2.db.layout.outRangeAlpha)
					else
						object.text:SetAlpha(1)
					end
				end
			end
		end
	)
	menu.outrange:SetPoint("TOPLEFT", 5, -10)
	menu.nameRv = LBO:CreateWidget("CheckBox", parent, "먼 사정거리 직업별 이름 색상 사용", "사정거리가 벗어난 플레이어의 이름 색상을 직업 색상으로 표시합니다.", nil, nil, nil,
		function()
			return IRF2.db.layout.nameRv
		end,
		function(v)
			IRF2.db.layout.nameRv = v
			IRF2:UpdateAllUnits()
		end
	)
	menu.nameRv:SetPoint("TOP", menu.outrange, "BOTTOM", 0, 0)
	menu.mana = LBO:CreateWidget("CheckBox", parent, "먼 사정거리 마나바 투명도 적용", "사정거리가 벗어난 플레이어의 마나바도 투명도를 적용합니다.", nil, nil, nil,
		function()
			return IRF2.db.layout.outRangeAlphaMana
		end,
		function(v)
			IRF2.db.layout.outRangeAlphaMana = v
			IRF2:UpdateAllUnits()
			for _, object in pairs(IRF2.objects) do
				if object.mana then
					if v then
						object.mana:SetAlpha(object.inRange and 1 or IRF2.db.layout.outRangeAlpha)
					else
						object.mana:SetAlpha(1)
					end
				end
			end
		end
	)
	menu.mana:SetPoint("TOP", menu.nameRv, "BOTTOM", 0, 0)
	menu.name = LBO:CreateWidget("CheckBox", parent, "먼 사정거리 이름 투명도 적용", "사정거리가 벗어난 플레이어의 이름도 투명도를 적용합니다.", nil, nil, nil,
		function()
			return IRF2.db.layout.outRangeAlphaName
		end,
		function(v)
			IRF2.db.layout.outRangeAlphaName = v
			IRF2:UpdateAllUnits()
			for _, object in pairs(IRF2.objects) do
				if object.textFrame then
					if v then
						object.textFrame:SetAlpha(object.inRange and 1 or IRF2.db.layout.outRangeAlpha)
					else
						object.textFrame:SetAlpha(1)
					end
				end
			end
		end
	)
	menu.name:SetPoint("TOP", menu.mana, "BOTTOM", 0, 0)
end

function Option:CreateLostHealthMenu(menu, parent)
	local rangeList = { "항상", "표시 안함", "사정거리 안", "사정거리 밖" }
	menu.use = LBO:CreateWidget("DropDown", parent, "표시 조건", "손실 생명력을 표시할 조건을 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.layout.lostHP, rangeList
		end,
		function(v)
			IRF2.db.layout.lostHP = v
			IRF2:UpdateAllUnits()
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -5)
	local disable = function() return IRF2.db.layout.lostHP == "표시 안함" end
	local displayList = { "한줄로 표시", "두줄로 표시", "이름과 대체" }
	menu.display = LBO:CreateWidget("DropDown", parent, "표시 조건", "손실 생명력을 표시할 조건을 설정합니다.", nil, disable, nil,
		function()
			if IRF2.db.layout.twoLine then
				return "두줄로 표시", displayList
			elseif IRF2.db.layout.replaceLostHP then
				return "이름과 대체", displayList
			else
				return "한줄로 표시", displayList
			end
		end,
		function(v)
			if v == "한줄로 표시" then
				IRF2.db.layout.twoLine = false
				IRF2.db.layout.replaceLostHP = false
			elseif v == "두줄로 표시" then
				IRF2.db.layout.twoLine = true
				IRF2.db.layout.replaceLostHP = false
			else
				IRF2.db.layout.twoLine = false
				IRF2.db.layout.replaceLostHP = true
			end
			IRF2:UpdateAllUnits()
		end
	)
	menu.display:SetPoint("TOPRIGHT", -5, -5)
	menu.red = LBO:CreateWidget("CheckBox", parent, "손실 생명력 색상으로 표시", "손실 생명력 글자색을 지정된 색으로 표시합니다.", nil, disable, nil,
		function()
			return IRF2.db.layout.lostHPred
		end,
		function(v)
			IRF2.db.layout.lostHPred = v
			LBO:Refresh(parent)
			IRF2:UpdateAllUnits()
		end
	)
	menu.red:SetPoint("TOP", menu.use, "BOTTOM", 0, -10)
	menu.color = LBO:CreateWidget("ColorPicker", parent, "손실 생명력 색상", "손실 생명력의 글자 색상을 설정합니다.", nil, function() return disable() or not IRF2.db.layout.lostHPred end, nil,
		function()
			local r, g, b = IRF2.db.layout.lostHPColor:match("(%x%x)(%x%x)(%x%x)")
			r, g, b = tonumber(r, 16) / 255, tonumber(g, 16) / 255, tonumber(b, 16) / 255
			return r, g, b
		end,
		function(r, g, b)
			IRF2.db.layout.lostHPColor = ("%.2x%.2x%.2x"):format(ceil(r * 255), ceil(g * 255), ceil(b * 255))
			IRF2:UpdateAllUnits()
		end
	)
	menu.color:SetPoint("TOP", menu.display, "BOTTOM", 0, -10)
	menu.short = LBO:CreateWidget("CheckBox", parent, "손실 생명력 짧게 표시", "손실 생명력 숫자를 k단위로 짧게 표시합니다. 예를 들어 3700의 손실 생명력이 있다면 이를 3.7로 표시합니다.", nil, disable, nil,
		function()
			return IRF2.db.layout.lostHPshort
		end,
		function(v)
			IRF2.db.layout.lostHPshort = v
			IRF2:UpdateAllUnits()
		end
	)
	menu.short:SetPoint("TOP", menu.red, "BOTTOM", 0, 5)
end

function Option:CreateUserSpellTimerMenu(menu, parent)
	local getUse = function(id) return IRF2.charDB.userSpellTimer.auraTypes[id], Option.dropdownTable["사용자주문타이머"] end
	local setUse = function(v, id)
		IRF2.charDB.userSpellTimer.auraTypes[id] = v
		IRF2:SetupUserSpellTimer()
		IRF2:UpdateAllUnits()
		LBO:Refresh(parent)
	end
	local disable = function(id) return IRF2.charDB.userSpellTimer.auraTypes[id] == "사용 안함" end
	local getPos = function(id) return IRF2.charDB.userSpellTimer.auraPos[id], Option.dropdownTable["위치2"] end
	local setPos = function(v, id)
		IRF2.charDB.userSpellTimer.auraPos[id] = v
		local pos = IRF2:GetFramePoint(v)
		for _, object in pairs(IRF2.objects) do
			if object.userSpellTimer and object.userSpellTimer[id] then
				object.userSpellTimer[id]:ClearAllPoints()
				object.userSpellTimer[id]:SetPoint(pos[1], object, pos[3])
			end
		end
	end
	local getName = function(id) return IRF2.charDB.userSpellTimer.auraNames[id] end
	local setName = function(v, id)
		IRF2.charDB.userSpellTimer.auraNames[id] = v
		IRF2:SetupUserSpellTimer()
		IRF2:UpdateAllUnits()
	end
	for i = 1, #IRF2.charDB.userSpellTimer.auraTypes do
		menu["use"..i] = LBO:CreateWidget("DropDown", parent, "사용자 주문 "..i, "사용자 주문 타이머 "..i.."의 사용 여부 및 버프/디버프 속성을 설정합니다.", nil, nil, nil, getUse, setUse, i)
		menu["use"..i]:SetWidth(100)
		menu["use"..i]:SetPoint("TOP", menu["use"..(i - 1)], "BOTTOM", 0, -10)
		menu["pos"..i] = LBO:CreateWidget("DropDown", parent, "위치", "사용자 주문 타이머 "..i.."의 위치를 설정합니다.", nil, disable, nil, getPos, setPos, i)
		menu["pos"..i]:SetWidth(100)
		menu["pos"..i]:SetPoint("TOP", menu["pos"..(i - 1)], "BOTTOM", 0, -10)
		menu["name"..i] = LBO:CreateWidget("EditBox", parent, "버프/디버프 이름", "사용자 주문 타이머 "..i.."로 사용할 버프 혹은 디버프의 이름을 입력하세요.", nil, disable, nil, getName, setName, i)
		menu["name"..i].title:ClearAllPoints()
		menu["name"..i].title:SetPoint("TOP", 0, -3)
		menu["name"..i].box:ClearAllPoints()
		menu["name"..i].box:SetPoint("TOP", menu["name"..i].title, "BOTTOM", 0, -7)
		menu["name"..i].box:SetPoint("LEFT", 0, 0)
		menu["name"..i].box:SetPoint("RIGHT", 0, 0)
		menu["name"..i]:SetPoint("TOPLEFT", menu["use"..i], "TOPRIGHT", 3, 0)
		menu["name"..i]:SetPoint("BOTTOMRIGHT", menu["pos"..i], "BOTTOMLEFT", -3, 0)
	end
	menu.use1:ClearAllPoints()
	menu.use1:SetPoint("TOPLEFT", 5, -10)
	menu.pos1:ClearAllPoints()
	menu.pos1:SetPoint("TOPRIGHT", -5, -10)
	menu.scale = LBO:CreateWidget("Slider", parent, "크기", "사용자 주문 타이머 아이콘의 전체적인 크기를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.charDB.userSpellTimer.scale * 100, 50, 150, 1, "%"
		end,
		function(v)
			IRF2.charDB.userSpellTimer.scale = v / 100
			for _, object in pairs(IRF2.objects) do
				if object.userSpellTimer then
					for _, timer in pairs(object.userSpellTimer) do
						timer:SetScale(IRF2.charDB.userSpellTimer.scale)
					end
				end
			end
		end
	)
	menu.scale:SetPoint("TOPLEFT", menu["use"..#IRF2.charDB.userSpellTimer.auraTypes], "BOTTOMLEFT", 0, -10)
end

function Option:CreateSurvivalSkillMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "생존기 보기", "플레이어가 시전한 생존기술(방패의 벽, 얼음 방패 등)을 플레이어의 이름과 대체합니다.", nil, nil, nil,
		function()
			return IRF2.db.layout.showSurvivalSkill
		end,
		function(v)
			IRF2.db.layout.showSurvivalSkill = v
			IRF2:UpdateAllUnits()
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, 5)
end

function Option:CreateIncommingHealMenu(menu, parent)
	local function update(refresh)
		if IRF2.IncomingHeals then
			IRF2:IncomingHeals()
		end
		if refresh then
			LBO:Refresh(parent)
		end
	end
	menu.use = LBO:CreateWidget("CheckBox", parent, "사용하기", "들어오는 치유 기능의 사용 여부를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.heal.use
		end,
		function(v)
			IRF2.db.heal.use = v
			update(true)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -5)
	local disable = function() return not IRF2.db.heal.use end
	local get = function(key) return IRF2.db.heal[key] end
	local set = function(v, key, refresh)
		IRF2.db.heal[key] = v
		update(refresh)
	end
	menu.alpha = LBO:CreateWidget("Slider", parent, "들어오는 치유바 투명도", "플레이어에게 들어오는 치유량을 표시하는 바의 투명도를 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.heal.barAlpha * 100, 0, 75, 1, "%"
		end,
		function(v)
			IRF2.db.heal.barAlpha = v / 100
			for _, object in pairs(IRF2.objects) do
				if object.heal then
					object.heal:SetAlpha(IRF2.db.heal.barAlpha)
				end
			end
		end
	)
	menu.alpha:SetPoint("TOPRIGHT", -5, -5)
	menu.myHeal = LBO:CreateWidget("CheckBox", parent, "들어오는 치유바에 자신의 치유량 합산", "들어오는 치유바에 자신이 치유하는 치유량을 합산합니다.", nil, disable, nil, get, set, "showMyHeal")
	menu.myHeal:SetPoint("TOP", menu.use, "BOTTOM", 0, 0)
	menu.icon = LBO:CreateWidget("CheckBox", parent, "치유 아이콘 표시", "치유바와는 별도로 치유 받는 플레이어에게 네모 모양의 치유 아이콘을 표시합니다.", nil, disable, nil, get, set, "showIcon", true)
	menu.icon:SetPoint("TOP", menu.myHeal, "BOTTOM", 0, 0)
	local disableIcon = function() return not IRF2.db.heal.use or not IRF2.db.heal.showIcon end
	menu.iconPos = LBO:CreateWidget("DropDown", parent, "치유 아이콘 위치", "치유 아이콘의 위치를 설정합니다.", nil, disableIcon, nil,
		function()
			return IRF2.db.heal.pos, Option.dropdownTable["위치2"]
		end,
		function(v)
			IRF2.db.heal.pos = v
			for _, object in pairs(IRF2.objects) do
				local pos = IRF2:GetFramePoint(v)
				if object.heal and object.heal.icon then
					object.heal.icon:ClearAllPoints()
					object.heal.icon:SetPoint(pos[1], object, pos[1], pos[2], pos[3])
				end
			end
		end
	)
	menu.iconPos:SetPoint("TOP", menu.alpha, "BOTTOM", 0, -35)
	menu.myIcon = LBO:CreateWidget("CheckBox", parent, "자신의 치유 아이콘 표시", "자신이 치유하고 있는 플레이어에게 아이콘을 표시합니다.", nil, disableIcon, nil, get, set, "myIcon", true)
	menu.myIcon:SetPoint("TOP", menu.icon, "BOTTOM", 0, 0)
	menu.myIconColor = LBO:CreateWidget("ColorPicker", parent, "자신의 치유 아이콘 색상", "자신이 치유하고 있는 플레이어의 아이콘 색상을 설정합니다.", nil, function() return disableIcon() or not IRF2.db.heal.myIcon end, nil,
		function()
			return unpack(IRF2.db.heal.myHealColor)
		end,
		function(r, g, b)
			IRF2.db.heal.myHealColor[1], IRF2.db.heal.myHealColor[2], IRF2.db.heal.myHealColor[3] = r, g, b
			update()
		end
	)
	menu.myIconColor:SetPoint("TOP", menu.iconPos, "BOTTOM", 0, -8)
	menu.otherIcon = LBO:CreateWidget("CheckBox", parent, "타인의 치유 아이콘 표시", "타인이 치유하고 있는 플레이어에게 아이콘을 표시합니다.", nil, disableIcon, nil, get, set, "otherIcon", true)
	menu.otherIcon:SetPoint("TOP", menu.myIcon, "BOTTOM", 0, 0)
	menu.otherIconColor = LBO:CreateWidget("ColorPicker", parent, "타인의 치유 아이콘 색상", "타인이 치유하고 있는 플레이어의 아이콘 색상을 설정합니다.", nil, function() return disableIcon() or not IRF2.db.heal.otherIcon end, nil,
		function()
			return unpack(IRF2.db.heal.otherHealColor)
		end,
		function(r, g, b)
			IRF2.db.heal.otherHealColor[1], IRF2.db.heal.otherHealColor[2], IRF2.db.heal.otherHealColor[3] = r, g, b
			update()
		end
	)
	menu.otherIconColor:SetPoint("TOP", menu.myIconColor, "BOTTOM", 0, 0)
end

function Option:CreateIgnoreDebuffMenu(menu, parent)
	local debuffs = {}
	menu.list = LBO:CreateWidget("List", parent, "무시할 디버프 목록", nil, nil, nil, nil,
		function()
			return Option:ConvertTable(IRF2.db._ignoreDebuff, debuffs), true
		end,
		function(v)
			menu.delete:Update()
		end
	)
	menu.list:SetPoint("TOPLEFT", 5, -5)
	menu.delete = LBO:CreateWidget("Button", parent, "삭제", "선택된 디버프를 목록에서 삭제합니다.", nil,
		function()
			if menu.list:GetValue() then
				menu.delete.title:SetFormattedText("\"%s\" 삭제", debuffs[menu.list:GetValue()])
				return nil
			else
				menu.delete.title:SetText("삭제")
				return true
			end
		end, nil,
		function()
			local name = debuffs[menu.list:GetValue()]
			IRF2:Message(("\"%s\"|1이;가; 무시할 디버프 목록에서 삭제되었습니다."):format(name))
			if IRF2.defaultIgnoreDebuff[name] then
				IRF2.db._ignoreDebuff[name] = false
			else
				IRF2.db._ignoreDebuff[name] = nil
			end
			menu.list:Setup()
			IRF2:UpdateAllUnits()
		end
	)
	menu.delete:SetPoint("TOPLEFT", menu.list, "BOTTOMLEFT", 0, 12)
	menu.delete:SetPoint("TOPRIGHT", menu.list, "BOTTOMRIGHT", 0, 12)
	menu.editbox = LBO:CreateEditBox(parent, nil, "ChatFontNormal", nil, true)
	menu.editbox:SetPoint("TOPLEFT", menu.delete, "BOTTOMLEFT", 2, 6)
	menu.editbox:SetPoint("TOPRIGHT", menu.delete, "BOTTOMRIGHT", -60, 6)
	menu.editbox:SetScript("OnTextChanged", function() menu.add:Update() end)
	menu.editbox:SetScript("OnEscapePressed", function(self)
		self:SetText("")
		self:ClearFocus()
	end)
	menu.add = LBO:CreateWidget("Button", parent, "추가", "디버프를 목록에 추가합니다.", nil, function() return (menu.editbox:GetText() or ""):trim() == "" end, nil,
		function()
			local text = (menu.editbox:GetText() or ""):trim()
			menu.editbox:SetText("")
			menu.editbox:ClearFocus()
			if IRF2.db._ignoreDebuff[text] then
				IRF2:Message(("\"%s\"|1은;는; 이미 무시할 디버프 목록에 있습니다."):format(text))
			else
				IRF2:Message(("\"%s\"|1이;가; 무시할 디버프 목록에 추가되었습니다."):format(text))
				IRF2.db._ignoreDebuff[text] = true
				menu.list:Setup()
				menu.delete:Update()
				IRF2:UpdateAllUnits()
			end
		end
	)
	menu.add:SetPoint("TOPLEFT", menu.editbox, "TOPRIGHT", 2, 14)
	menu.add:SetPoint("RIGHT", menu.delete, "RIGHT", 0, 0)
end

function Option:CreateDebuffIconMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "사용하기", "디버프 아이콘 표시 기능의 사용 여부를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.debuff.use
		end,
		function(v)
			IRF2.db.debuff.use = v
			IRF2:UpdateAllUnits()
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -5)
	local disable = function() return not IRF2.db.debuff.use end
	menu.num = LBO:CreateWidget("Slider", parent, "표시될 디버프 수", "플레이어 프레임에 표시될 디버프 수를 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.debuff.num, 1, 5, 1, "개"
		end,
		function(v)
			IRF2.db.debuff.num = v
			IRF2:UpdateAllUnits()
		end
	)
	menu.num:SetPoint("TOPRIGHT", -5, -5)
	menu.pos = LBO:CreateWidget("DropDown", parent, "위치", "디버프 아이콘이 플레이어 프레임에 위치할 곳을 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.debuff.pos, Option.dropdownTable["위치2"]
		end,
		function(v)
			IRF2.db.debuff.pos = v
			local pos = IRF2:GetFramePoint(v)[1]
			for _, object in pairs(IRF2.objects) do
				if object.debuffFrame then
					object.debuffFrame:ClearAllPoints()
					object.debuffFrame:SetPoint(pos, object, pos)
				end
			end
		end
	)
	menu.pos:SetPoint("TOP", menu.use, "BOTTOM", 0, 0)
	menu.size = LBO:CreateWidget("Slider", parent, "크기", "디버프 아이콘의 크기를 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.debuff.size, 8, 24, 1, "픽셀"
		end,
		function(v)
			IRF2.db.debuff.size = v
			for _, object in pairs(IRF2.objects) do
				if object.debuffFrame then
					for _, debuff in pairs(object.debuffFrame) do
						debuff:SetWidth(v)
						debuff:SetHeight(v)
					end
				end
			end
		end
	)
	menu.size:SetPoint("TOP", menu.num, "BOTTOM", 0, -10)
	local typeList = { "아이콘", "색상", "아이콘 + 테두리" }
	menu.type = LBO:CreateWidget("DropDown", parent, "표시 형식", "디버프 아이콘의 표시 형식을 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.debuff.iconType, typeList
		end,
		function(v)
			IRF2.db.debuff.iconType = v
			for _, object in pairs(IRF2.objects) do
				if object.debuffFrame then
					for _, debuff in pairs(object.debuffFrame) do
						debuff.color:ClearAllPoints()
						debuff.icon:ClearAllPoints()
						if v == "아이콘" then
							debuff.color:SetAllPoints(debuff)
							debuff.color:Hide()
							debuff.icon:SetAllPoints(debuff)
							debuff.icon:Show()
						elseif v == "색상" then
							debuff.color:SetPoint("TOPLEFT", debuff, "TOPLEFT", 1, -1)
							debuff.color:SetPoint("BOTTOMRIGHT", debuff, "BOTTOMRIGHT", -1, 1)
							debuff.color:Show()
							debuff.icon:SetAllPoints(debuff)
							debuff.icon:Hide()
						else
							debuff.color:SetAllPoints(debuff)
							debuff.color:Show()
							debuff.icon:SetPoint("TOPLEFT", debuff, "TOPLEFT", 1, -1)
							debuff.icon:SetPoint("BOTTOMRIGHT", debuff, "BOTTOMRIGHT", -1, 1)
							debuff.icon:Show()
						end
					end
					IRF2:AuraUpdate(object.unit)
				end
			end
		end
	)
	menu.type:SetPoint("TOP", menu.pos, "BOTTOM", 0, -10)
	local get = function(debuff) return IRF2.charDB.debuff[debuff] end
	local set = function(v, debuff)
		IRF2.charDB.debuff[debuff] = v
		IRF2:UpdateAllUnits()
	end
	for i, debuff in ipairs(self.dropdownTable["디버프"]) do
		menu["debuff"..i] = LBO:CreateWidget("CheckBox", parent, debuff.." 보기", debuff.." 계열의 디버프를 표시합니다.", nil, disable, nil, get, set, self.dropdownTable["디버프영문"][i])
		if i == 1 then
			menu["debuff"..i]:SetPoint("TOP", menu.type, "BOTTOM", 0, -5)
		elseif i == 2 then
			menu["debuff"..i]:SetPoint("TOPRIGHT", -5, -152)
		else
			menu["debuff"..i]:SetPoint("TOP", menu["debuff"..(i - 2)], "BOTTOM", 0, 5)
		end
	end
end

function Option:CreateDebuffHealthMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "사용하기", "디버프 아이콘 표시 기능의 사용 여부를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.debuffColor.changeHealthColor
		end,
		function(v)
			IRF2.db.debuffColor.changeHealthColor = v
			IRF2:UpdateAllUnits()
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, 5)
	local disable = function() return not IRF2.db.debuffColor.changeHealthColor end
	menu.reset = LBO:CreateWidget("Button", parent, "색상 초기화", "설정한 색상을 초기값으로 되돌립니다.", nil, disable, nil,
		function()
			IRF2.db.debuffColor.Curse[1], IRF2.db.debuffColor.Curse[2], IRF2.db.debuffColor.Curse[3] = 0.6, 0, 1
			IRF2.db.debuffColor.Magic[1], IRF2.db.debuffColor.Magic[2], IRF2.db.debuffColor.Magic[3] = 1, 1, 1
			IRF2.db.debuffColor.Disease[1], IRF2.db.debuffColor.Disease[2], IRF2.db.debuffColor.Disease[3] = 0.6, 0.4, 0
			IRF2.db.debuffColor.Poison[1], IRF2.db.debuffColor.Poison[2], IRF2.db.debuffColor.Poison[3] = 0, 0.25, 0
			IRF2.db.debuffColor.Normal[1], IRF2.db.debuffColor.Normal[2], IRF2.db.debuffColor.Normal[3] = 0.31, 0.64, 0.44
			IRF2:UpdateAllUnits()
			LBO:Refresh(parent)
		end
	)
	menu.reset:SetPoint("TOPRIGHT", -5, 5)
	local get = function(debuff) return IRF2.charDB.dispel[debuff] end
	local set = function(v, debuff)
		IRF2.charDB.dispel[debuff] = v
		IRF2:UpdateAllUnits()
	end
	local getColor = function(debuff) return unpack(IRF2.db.debuffColor[debuff]) end
	local setColor = function(r, g, b, debuff)
		IRF2.db.debuffColor[debuff][1], IRF2.db.debuffColor[debuff][2], IRF2.db.debuffColor[debuff][3] = r, g, b
		IRF2:UpdateAllUnits()
	end
	for i, debuff in ipairs(self.dropdownTable["디버프"]) do
		menu["debuff"..i] = LBO:CreateWidget("CheckBox", parent, debuff.." 보기", debuff.." 계열의 디버프에 걸리면 체력바 색상을 변경합니다.", nil, disable, nil, get, set, self.dropdownTable["디버프영문"][i])
		menu["debuffColor"..i] = LBO:CreateWidget("ColorPicker", parent, debuff.." 색상", debuff.." 계열의 디버프의 색상을 설정합니다.", nil, disable, nil, getColor, setColor, self.dropdownTable["디버프영문"][i])
		if i == 1 then
			menu["debuff"..i]:SetPoint("TOP", menu.use, "BOTTOM", 0, 0)
			menu["debuffColor"..i]:SetPoint("TOP", menu.reset, "BOTTOM", 0, 0)
		else
			menu["debuff"..i]:SetPoint("TOP", menu["debuff"..(i - 1)], "BOTTOM", 0, 5)
			menu["debuffColor"..i]:SetPoint("TOP", menu["debuffColor"..(i - 1)], "BOTTOM", 0, 5)
		end
	end
end

function Option:CreateDebuffSoundMenu(menu, parent)
	menu.use = LBO:CreateWidget("Media", parent, "디버프 소리 재생", "자신이 해제 가능한 디버프에 걸린 플레이어가 있으면 소리를 재생합니다. None으로 설정하시면 소리 재생 기능을 사용하지 않습니다.", nil, nil, nil,
		function()
			return IRF2.charDB.sound.debuffGain, "sound"
		end,
		function(v)
			IRF2.charDB.sound.debuffGain = v
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -10)
end

function Option:CreateRaidDebuffMenu(menu, parent)
	local debuffs = {}
	menu.list = LBO:CreateWidget("List", parent, "중요 디버프 목록", nil, nil, nil, nil,
		function()
			return Option:ConvertTable(IRF2.db._userDebuffs, debuffs), true
		end,
		function(v)
			menu.delete:Update()
		end
	)
	menu.list:SetPoint("TOPLEFT", 5, -5)
	menu.delete = LBO:CreateWidget("Button", parent, "삭제", "선택된 디버프를 목록에서 삭제합니다.", nil,
		function()
			if menu.list:GetValue() then
				menu.delete.title:SetFormattedText("\"%s\" 삭제", debuffs[menu.list:GetValue()])
				return nil
			else
				menu.delete.title:SetText("삭제")
				return true
			end
		end, nil,
		function()
			local name = debuffs[menu.list:GetValue()]
			IRF2:Message(("\"%s\"|1이;가; 중요 목록에서 삭제되었습니다."):format(name))
			if IRF2.defaultUserDebuffs[name] then
				IRF2.db._userDebuffs[name] = false
			else
				IRF2.db._userDebuffs[name] = nil
			end
			menu.list:Setup()
			IRF2:UpdateAllUnits()
		end
	)
	menu.delete:SetPoint("TOPLEFT", menu.list, "BOTTOMLEFT", 0, 12)
	menu.delete:SetPoint("TOPRIGHT", menu.list, "BOTTOMRIGHT", 0, 12)
	menu.editbox = LBO:CreateEditBox(parent, nil, "ChatFontNormal", nil, true)
	menu.editbox:SetPoint("TOPLEFT", menu.delete, "BOTTOMLEFT", 2, 6)
	menu.editbox:SetPoint("TOPRIGHT", menu.delete, "BOTTOMRIGHT", -60, 6)
	menu.editbox:SetScript("OnTextChanged", function() menu.add:Update() end)
	menu.editbox:SetScript("OnEscapePressed", function(self)
		self:SetText("")
		self:ClearFocus()
	end)
	menu.add = LBO:CreateWidget("Button", parent, "추가", "디버프를 목록에 추가합니다.", nil, function() return (menu.editbox:GetText() or ""):trim() == "" end, nil,
		function()
			local text = (menu.editbox:GetText() or ""):trim()
			menu.editbox:SetText("")
			menu.editbox:ClearFocus()
			if IRF2.db._userDebuffs[text] then
				IRF2:Message(("\"%s\"|1은;는; 이미 중요 목록에 있습니다."):format(text))
			else
				IRF2:Message(("\"%s\"|1이;가; 중요 목록에 추가되었습니다."):format(text))
				IRF2.db._userDebuffs[text] = true
				menu.list:Setup()
				menu.delete:Update()
				IRF2:UpdateAllUnits()
			end
		end
	)
	menu.add:SetPoint("TOPLEFT", menu.editbox, "TOPRIGHT", 2, 14)
	menu.add:SetPoint("RIGHT", menu.delete, "RIGHT", 0, 0)
	local posList = { "좌측 상단", "좌측", "좌측 하단", "상단", "중앙", "하단", "우측 상단", "우측", "우측 하단", "표시 안함" }
	menu.pos = LBO:CreateWidget("DropDown", parent, "위치 및 사용", "중요 디버프 아이콘을 표시할 위치 및 사용 여부를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.userDebuff.pos, posList
		end,
		function(v)
			IRF2.db.userDebuff.pos = v
			if v ~= "표시 안함" then
				local pos = IRF2:GetFramePoint(v)
				for _, object in pairs(IRF2.objects) do
					if object.userDebuff then
						object.userDebuff:ClearAllPoints()
						object.userDebuff:SetPoint(pos[1], object, pos[1], pos[2], pos[3])
						object.userDebuff.text:ClearAllPoints()
						if v:find("우측") then
							object.userDebuff.text:SetPoint("RIGHT", object.userDebuff, "LEFT", 3, 0)
						else
							object.userDebuff.text:SetPoint("LEFT", object.userDebuff, "RIGHT", -3, 0)
						end
					end
				end
			end
			IRF2:UpdateAllUnits()
		end
	)
	menu.pos:SetPoint("TOPRIGHT", -5, -10)
	menu.size = LBO:CreateWidget("Slider", parent, "크기", "중요 디버프 아이콘의 크기를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.userDebuff.size, 8, 30, 1, "픽셀"
		end,
		function(v)
			IRF2.db.userDebuff.size = v
			for _, object in pairs(IRF2.objects) do
				if object.userDebuff then
					object.userDebuff:SetWidth(v)
					object.userDebuff:SetHeight(v)
				end
			end
		end
	)
	menu.size:SetPoint("TOP", menu.pos, "BOTTOM", 0, -10)
	menu.alpha = LBO:CreateWidget("Slider", parent, "투명도", "중요 디버프 아이콘의 투명도를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.userDebuff.alpha * 100, 0, 100, 1, "%"
		end,
		function(v)
			IRF2.db.userDebuff.alpha = v / 100
			for _, object in pairs(IRF2.objects) do
				if object.userDebuff then
					object.userDebuff:SetAlpha(IRF2.db.userDebuff.alpha)
				end
			end
		end
	)
	menu.alpha:SetPoint("TOP", menu.size, "BOTTOM", 0, -10)
	menu.timer = LBO:CreateWidget("CheckBox", parent, "남은 시간 표시", "중요 디버프의 남은 시간을 표시합니다.", nil, nil, nil,
		function()
			return not IRF2.db.userDebuff.hideTimer
		end,
		function(v)
			IRF2.db.userDebuff.hideTimer = not v
			IRF2:UpdateAllUnits()
		end
	)
	menu.timer:SetPoint("TOP", menu.alpha, "BOTTOM", 0, -10)
end

function Option:CreateEnemyMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "사용하기", "정신 지배 등으로 적대적이된 플레이어의 체력바 색상을 변경하는 기능의 사용 여부를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.showEnemy
		end,
		function(v)
			IRF2.db.showEnemy = v
			IRF2:UpdateAllUnits()
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, 5)
	menu.color = LBO:CreateWidget("ColorPicker", parent, "색상", "적대적이된 플레이어의 체력바 색상을 설정합니다.", nil, function() return not IRF2.db.showEnemy end, nil,
		function()
			return unpack(IRF2.db.enemyColor)
		end,
		function(r, g, b)
			IRF2.db.enemyColor[1], IRF2.db.enemyColor[2], IRF2.db.enemyColor[3] = r, g, b
			IRF2:UpdateAllUnits()
		end
	)
	menu.color:SetPoint("TOPRIGHT", -5, 5)
end

function Option:CreateRaidTargetMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "사용하기", "전술 목표 아이콘을 플레이어 프레임에 표시합니다.", nil, nil, nil,
		function()
			return IRF2.db.raidIcon.use
		end,
		function(v)
			IRF2.db.raidIcon.use = v
			IRF2:UpdateAllUnits()
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, -5)
	local disable = function() return not IRF2.db.raidIcon.use end
	local centerPos = { CENTER = "RIGHT", TOP = "TOPRIGHT", BOTTOM = "BOTTOMRIGHT" }
	local updatePos = function()
		local pos = IRF2:GetFramePoint(IRF2.db.raidIcon.pos)[1]
		for _, object in pairs(IRF2.objects) do
			if object.raidIcon then
				object.raidIcon:ClearAllPoints()
				object.raidIcon2:ClearAllPoints()
				if IRF2.db.raidIcon.showTarget then
					if centerPos[pos] then
						object.raidIcon:SetPoint(centerPos[pos], object, pos)
						object.raidIcon2:SetPoint(reversePos[centerPos[pos]], object, pos)
					else
						object.raidIcon:SetPoint(pos, object, pos)
						object.raidIcon2:SetPoint(pos, object.raidIcon, reversePos[pos])
					end
				else
					object.raidIcon:SetPoint(pos, object, pos)
					object.raidIcon2:Hide()
				end
			end
		end
	end
	menu.pos = LBO:CreateWidget("DropDown", parent, "위치", "전술 목표 아이콘의 위치를 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.raidIcon.pos, Option.dropdownTable["위치2"]
		end,
		function(v)
			IRF2.db.raidIcon.pos = v
			updatePos()
		end
	)
	menu.pos:SetPoint("TOPRIGHT", -5, -5)
	menu.target = LBO:CreateWidget("CheckBox", parent, "대상이 선택한 대상의 전술 목표 아이콘 보기", "플레이어가 선택한 대상의 전술 목표 아이콘을 표시합니다.", nil, disable, nil,
		function()
			return IRF2.db.raidIcon.showTarget
		end,
		function(v)
			IRF2.db.raidIcon.showTarget = v
			updatePos()
			IRF2:UseUnitTargetIcon()
			IRF2:UpdateAllUnits()
		end
	)
	menu.target:SetPoint("TOP", menu.use, "BOTTOM", 0, 0)
	menu.scale = LBO:CreateWidget("Slider", parent, "전술 목표 아이콘 크기", "전술 목표 아이콘의 크기를 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.raidIcon.size, 8, 24, 1, "픽셀"
		end,
		function(v)
			IRF2.db.raidIcon.size = v
			for _, object in pairs(IRF2.objects) do
				if object.raidIcon then
					object.raidIcon:SetWidth(v)
					object.raidIcon:SetHeight(v)
					object.raidIcon2:SetWidth(v)
					object.raidIcon2:SetHeight(v)
				end
			end
		end
	)
	menu.scale:SetPoint("TOP", menu.target, "BOTTOM", 0, 0)
	local get = function(id) return IRF2.db.raidIcon.filter[id] end
	local set = function(v, id)
		IRF2.db.raidIcon.filter[id] = v
		IRF2:UpdateAllUnits()
	end
	for i, icon in ipairs(self.dropdownTable["징표"]) do
		menu["icon"..i] = LBO:CreateWidget("CheckBox", parent, icon.." 보기", icon.."를 레이드 프레임에 표시합니다.", nil, disable, nil, get, set, i)
		if i == 1 then
			menu["icon"..i]:SetPoint("TOPLEFT", 5, -140)
		elseif i == 2 then
			menu["icon"..i]:SetPoint("TOPRIGHT", -5, -140)
		else
			menu["icon"..i]:SetPoint("TOP", menu["icon"..(i - 2)], "BOTTOM", 0, 5)
		end
	end
end

function Option:CreateCastingBarMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "사용하기", "시전바 보기 기능의 사용 여부를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.castingBar.use
		end,
		function(v)
			IRF2.db.castingBar.use = v
			for _, object in pairs(IRF2.units) do
				if object.castingBar then
					object:UpdateCastingBar()
				end
			end
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, 5)
	local disable = function() return not IRF2.db.castingBar.use end
	menu.color = LBO:CreateWidget("ColorPicker", parent, "색상", "시전바의 색상을 설정합니다.", nil, disable, nil,
		function()
			return unpack(IRF2.db.castingBar.color)
		end,
		function(r, g, b)
			IRF2.db.castingBar.color[1], IRF2.db.castingBar.color[2], IRF2.db.castingBar.color[3] = r, g, b
			for _, object in pairs(IRF2.objects) do
				if object.castingBar then
					object.castingBar:SetStatusBarColor(r, g, b)
				end
			end
		end
	)
	menu.color:SetPoint("TOPRIGHT", -5, 5)
	local posList = { "상단", "하단", "좌측", "우측" }
	local update = function()
		for _, object in pairs(IRF2.objects) do
			if object.castingBar then
				object.castingBar:ClearAllPoints()
				if IRF2.db.castingBar.pos == "상단" then
					object.castingBar:SetPoint("TOPLEFT", object, "TOPLEFT", 0, 0)
					object.castingBar:SetPoint("BOTTOMRIGHT", object, "TOPRIGHT", 0, -IRF2.db.castingBar.height)
					object.castingBar:SetOrientation("HORIZONTAL")
				elseif IRF2.db.castingBar.pos == "하단" then
					object.castingBar:SetPoint("TOPLEFT", object, "BOTTOMLEFT", 0, IRF2.db.castingBar.height)
					object.castingBar:SetPoint("BOTTOMRIGHT", object, "BOTTOMRIGHT", 0, 0)
					object.castingBar:SetOrientation("HORIZONTAL")
				elseif IRF2.db.castingBar.pos == "좌측" then
					object.castingBar:SetPoint("TOPLEFT", object, "TOPLEFT", 0, 0)
					object.castingBar:SetPoint("BOTTOMRIGHT", object, "BOTTOMLEFT", IRF2.db.castingBar.height, 0)
					object.castingBar:SetOrientation("VERTICAL")
				else
					object.castingBar:SetPoint("TOPLEFT", object, "TOPRIGHT", -IRF2.db.castingBar.height, 0)
					object.castingBar:SetPoint("BOTTOMRIGHT", object, "BOTTOMRIGHT", 0, 0)
					object.castingBar:SetOrientation("VERTICAL")
				end
			end
		end
	end
	menu.pos = LBO:CreateWidget("DropDown", parent, "위치", "시전바가 플레이어 프레임에 위치할 곳을 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.castingBar.pos, posList
		end,
		function(v)
			IRF2.db.castingBar.pos = v
			update()
		end
	)
	menu.pos:SetPoint("TOP", menu.use, "BOTTOM", 0, 0)
	menu.size = LBO:CreateWidget("Slider", parent, "크기", "시전바의 크기를 설정합니다.", nil, disable, nil,
		function()
			return IRF2.db.castingBar.height, 1, 5, 1, "픽셀"
		end,
		function(v)
			IRF2.db.castingBar.height = v
			update()
		end
	)
	menu.size:SetPoint("TOP", menu.color, "BOTTOM", 0, 0)
end

function Option:CreateResurrectionMenu(menu, parent)
	menu.use = LBO:CreateWidget("CheckBox", parent, "사용하기", "플레이어에게 시전되는 부활 시전바 보기 기능 사용 여부를 설정합니다.", nil, nil, nil,
		function()
			return IRF2.db.resurrection.use
		end,
		function(v)
			IRF2.db.resurrection.use = v
			IRF2:UpdateAllUnits()
			LBO:Refresh(parent)
		end
	)
	menu.use:SetPoint("TOPLEFT", 5, 5)
	menu.color = LBO:CreateWidget("ColorPicker", parent, "색상", "부활 시전바 색상을 설정합니다.", nil, function() return not IRF2.db.resurrection.use end, nil,
		function()
			return unpack(IRF2.db.resurrection.color)
		end,
		function(r, g, b)
			IRF2.db.resurrection.color[1], IRF2.db.resurrection.color[2], IRF2.db.resurrection.color[3] = r, g, b
			IRF2:UpdateAllUnits()
		end
	)
	menu.color:SetPoint("TOPRIGHT", -5, 5)
end