-- ----------------------------------------------------------------------------
-- Localized Lua globals.
-- ----------------------------------------------------------------------------
-- Functions
local _G = getfenv(0)
local pairs = _G.pairs
-- Libraries

-- ----------------------------------------------------------------------------
-- AddOn namespace.
-- ----------------------------------------------------------------------------
local ALName, ALPrivate = ...

local AtlasLoot = _G.AtlasLoot
local WorldMap = {}
AtlasLoot.WorldMap = WorldMap
local AL = AtlasLoot.Locales
local GetAlTooltip = AtlasLoot.Tooltip.GetTooltip
local profile

local function checkAddonStatus(addonName)
	if not addonName then return nil end
	local loadable = select(4, GetAddOnInfo(addonName))
	local enabled = GetAddOnEnableState(UnitName("player"), addonName)
	if (enabled > 0 and loadable) then
		return true
	else
		return false
	end
end

local function AdjustOtherWorldMapButton(adjust)
	profile = AtlasLoot.db.WorldMap

	if (not (checkAddonStatus("Mapster") or checkAddonStatus("HandyNotes_WorldMapButton") or checkAddonStatus("ElvUI"))) then return end
	local ElvUI_BZSkin = false
	if (checkAddonStatus("ElvUI") and ElvPrivateDB) then
		local profileKey
		if ElvPrivateDB.profileKeys then
			profileKey = ElvPrivateDB.profileKeys[UnitName("player")..' - '..GetRealmName()]
		end

		if profileKey and ElvPrivateDB.profiles and ElvPrivateDB.profiles[profileKey] and ElvPrivateDB.profiles[profileKey]["skins"] then
			if (ElvPrivateDB.profiles[profileKey]["skins"]["blizzard"]["enable"] and ElvPrivateDB.profiles[profileKey]["skins"]["blizzard"]["worldmap"]) then
				ElvUI_BZSkin = true
			end
		end
	end
	
	if (checkAddonStatus("ElvUI") and profile.buttonOnTitleBar and ElvUI_BZSkin) then
		local button = _G["AtlasLootToggleFromWorldMap2"]
		button:SetNormalTexture("Interface\\Icons\\INV_Box_01")
		button:SetWidth(16)
		button:SetHeight(16)
		button:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square", "ADD")
	end

	local HandyNotesButton = _G["HandyNotesWorldMapButton"]
	if (HandyNotesButton) then
		if (adjust) then
			HandyNotesButton:SetPoint("TOPRIGHT", WorldMapFrame.BorderFrame, "TOPRIGHT", -72, -3)
		else
			HandyNotesButton:SetPoint("TOPRIGHT", WorldMapFrame.BorderFrame, "TOPRIGHT", -48, -3)
		end
	end

	local mapsterButton = _G["MapsterOptionsButton"]
	if (mapsterButton and mapsterButton:IsShown()) then
		if (adjust) then
			if (HandyNotesButton) then
				mapsterButton:SetPoint("TOPRIGHT", WorldMapTitleButton, "TOPRIGHT", -40, -3)
			else
				mapsterButton:SetPoint("TOPRIGHT", WorldMapTitleButton, "TOPRIGHT", -20, -3)
			end
		else
			if (HandyNotesButton) then
				mapsterButton:SetPoint("TOPRIGHT", WorldMapTitleButton, "TOPRIGHT", -16, -3)
			else
				mapsterButton:SetPoint("TOPRIGHT", WorldMapTitleButton, "TOPRIGHT", 0, -3)
			end
		end
	end

end

local function ButtonBinding()
	local button = _G["AtlasLootToggleFromWorldMap2"]
	if (not button) then
		button = CreateFrame("Button", "AtlasLootToggleFromWorldMap2", WorldMapFrame.BorderFrame)
		button:SetWidth(32)
		button:SetHeight(32)
		
		button:SetPoint("TOPRIGHT", WorldMapFrameSizeDownButton, -24, 0, "TOPRIGHT") 
		button:SetNormalTexture("Interface\\AddOns\\AtlasLoot\\Images\\AtlasLootButton-Up")
		button:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight", "ADD")

		button:SetScript("OnEnter", WorldMap.Button_OnEnter)
		button:SetScript("OnLeave", WorldMap.Button_OnLeave)
		button:SetScript("OnClick", WorldMap.Button_OnClick)
		button:SetScript("OnShow", AdjustOtherWorldMapButton)
	end
end

function WorldMap.Init()
	profile = AtlasLoot.db.WorldMap
	local button
	
	if (profile.buttonOnTitleBar) then
		ButtonBinding()
		button = _G["AtlasLootToggleFromWorldMap2"]
	else
		button = _G["AtlasLootToggleFromWorldMap1"]
	end

	if (profile.showbutton) then
		button:Show()
	else
		button:Hide()
	end
end
AtlasLoot:AddInitFunc(WorldMap.Init)

function WorldMap.ToggleButtonOnChange()
	local button
	if (profile.buttonOnTitleBar) then
		button = _G["AtlasLootToggleFromWorldMap2"]
		if (not button) then ButtonBinding() end
		button = _G["AtlasLootToggleFromWorldMap2"]
	else
		button = _G["AtlasLootToggleFromWorldMap1"]
	end

	if (profile.showbutton) then
		if (profile.buttonOnTitleBar) then
			AdjustOtherWorldMapButton(true)
		end
		button:Show()
	else
		if (profile.buttonOnTitleBar) then
			AdjustOtherWorldMapButton(false)
		end
		button:Hide()
	end
end

function WorldMap.ButtonStyleOnChange(styleID)
	if (not profile.showbutton) then return end
	local button1 = _G["AtlasLootToggleFromWorldMap1"]
	local button2 = _G["AtlasLootToggleFromWorldMap2"]

	if (profile.buttonOnTitleBar) then
		button1:Hide()
		if (not button2) then ButtonBinding() end
		button2 = _G["AtlasLootToggleFromWorldMap2"]
		button2:Show()
		AdjustOtherWorldMapButton(true)
	else
		button1:Show()
		button2:Hide()
		AdjustOtherWorldMapButton(false)
	end
end

function WorldMap.Button_OnEnter(self)
	local tooltip = GetAlTooltip()
	tooltip:ClearLines()
	if owner and type(owner) == "table" then
		tooltip:SetOwner(owner[1], owner[2], owner[3], owner[4])
	else
		tooltip:SetOwner(self, "ANCHOR_RIGHT", -(self:GetWidth() * 0.5), 5)
	end
	tooltip:AddLine(AL["Click to open AtlasLoot window"])
	tooltip:Show()
end

function WorldMap.Button_OnLeave(self)
	GetAlTooltip():Hide()
end

function WorldMap.Button_OnClick(self, button)
	if (not AtlasLoot.GUI.frame:IsVisible()) then
		AtlasLoot.GUI.frame:Show()
	end
	ToggleFrame(WorldMapFrame)
end

