if not Grid then return end

local AceOO = AceLibrary("AceOO-2.0")
local ClickFrameClass = AceOO.Class(GridFrame.frameClass)

local _frameClass = nil
if ( not _frameClass ) then
	_frameClass = GridFrame.frameClass
	GridFrame.frameClass = ClickFrameClass
end

DefaultClickSet = {
	--  ["1"] : 마우스 좌 클릭 (LeftButton)
	--  ["2"] : 마우스 우 클릭 (RightButton)
	--  ["3"] : 마우스 중앙 클릭 (MiddleButton)
	--  ["4"] : 4번 버튼 클릭 (Button4)
	--  ["5"] : 5번 버튼 클릭 (Button5)

	PRIEST = {
		["1"] = {
			["shift-"] = "소생",
			["ctrl-"] = "마법 무효화",
			["alt-"]	= "치유(2 레벨)",
			["ctrl-alt-"] = "부활",
		},
		["2"] = {
			[""] = "신의 권능: 보호막",
			["shift-"] = "회복의 기원",
			["ctrl-"] = "질병 해제",
			["alt-"]	= "상급 치유(1 레벨)",
			["ctrl-alt-"] = "공포의 수호물",
		},
		["3"] = {
			[""] = "순간 치유",
		},
	},

	DRUID = {
		["1"] = {
			["shift-"] = "회복",
			["ctrl-"] = "독 해제",
			["alt-"]	= "정신 자극",
		},
		["2"] = {
			--[""] = "야생의 징표",
			["shift-"] = "피어나는 생명",
			["ctrl-"] = "저주 해제",
			["alt-"]	= "치유의 손길",
		},
	},

	SHAMAN = {
		["1"] = {
			["shift-"] = "해독",
			["ctrl-"] = "연쇄 치유",
			["alt-"]	= "치유의 물결",
			--["ctrl-alt-"] = "고대의 영혼",
		},
		["2"] = {
			[""] = "하급 치유의 물결",
			["shift-"] = "질병 치료",
			["ctrl-"] = "연쇄 치유(1 레벨)",
			["alt-"]	= "치유의 물결",
		},
		["3"] = {
			[""] = "연쇄 치유(3 레벨)",
		},
	},

	PALADIN = {
		["1"] = {
			["shift-"] = "빛의 섬광",
			["ctrl-"] = "왕의 축복",
			["alt-"]	= "빛의 섬광(5 레벨)",
			["ctrl-alt-"] = "구원",
		},
		["2"] = {
			[""] = "정화",
			["shift-"] = "성스러운 빛",
			["ctrl-"] = "구원의 축복",
			["alt-"]	= "성스러운 빛(8 레벨)",
		},
		["3"] = {
			--[""] = "성스러운 빛",
		},
	},

	WARRIOR = {
		["2"] = {
			[""] = "가로막기",
		},
	},

	MAGE = {
		["1"] = {
			["shift-"] = "마법 증폭",
			["alt-"]	= "신비한 지능",
		},
		["2"] = {
			[""] = "하급 저주 해제",
			["shift-"] = "마법 감쇠",
		},
	},

	WARLOCK = {
		["1"] = {
			["alt-"]	= "투명체 감지",
			["ctrl-"] = "영원의 숨결",
		},
		["2"] = {
			[""] = "소환 의식",
		},
	},

	HUNTER = {
		["2"] = {
			[""] = "눈속임",
		},
	},
};

function SetUnitButtonAttributes(frame, class)
        local button, sets;
        if(DefaultClickSet and DefaultClickSet[class]) then
                for button, sets in pairs(DefaultClickSet[class]) do
                        for modifier, spell in pairs(sets) do
                                frame:SetAttribute(modifier.."type"..button, "spell");
                                frame:SetAttribute(modifier.."spell"..button, spell);
                        end
                end
        end
end

function ClickFrameClass.prototype:CreateFrames()
	ClickFrameClass.super.prototype.CreateFrames(self);
	local f = self.frame;
	local c = select(2, UnitClass"player");
	if not InCombatLockdown() then
		SetUnitButtonAttributes(f, c);
	end
end