local E, L, V, P, G = unpack(ElvUI)
local S = E:GetModule("Skins")
local AS = E:GetModule("AddOnSkins")

if not AS:IsAddonLODorEnabled("WIM") then return end

local format = string.format

-- WIM 3.3.7
-- https://www.wowace.com/projects/wim-3/files/439176

S:AddCallbackForAddon("WIM", "WIM", function()
	if not E.private.addOnSkins.WIM then return end

	local function formatDetails(window, guild, level, race, class)
		if guild == "" then
			return format("|cffffffff %s %s %s|r", level, race, class)
		else
			return format("|cffffffff<%s> %s %s %s|r", guild, level, race, class)
		end
	end

	local WIM_Elvui = {
		title = "WIM ElvUI",
		version = "1.0.0",
		author = "Divico",
		website = "",
		message_window = {
			texture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\message_window",
			min_width = 256,
			min_height = 128,
			backdrop = {
				top_left = {
					width = 64,
					height = 64,
					offset = {0, 0},
					texture_coord = {0, 0, 0, .25, .25, 0, .25, .25}
				},
				top_right = {
					width = 64,
					height = 64,
					offset = {0, 0},
					texture_coord = {.75, 0, .75, .25, 1, 0, 1, .25}
				},
				bottom_left = {
					width = 64,
					height = 64,
					offset = {0, 0},
					texture_coord = {0, .75, 0, 1, .25, .75, .25, 1}
				},
				bottom_right = {
					width = 64,
					height = 64,
					offset = {0, 0},
					texture_coord = {.75, .75, .75, 1, 1, .75, 1, 1}
				},
				top = {
					tile = false,
					texture_coord = {.25, 0, .25, .25, .75, 0, .75, .25}
				},
				bottom = {
					tile = false,
					texture_coord = {.25, .75, .25, 1, .75, .75, .75, 1}
				},
				left = {
					tile = false,
					texture_coord = {0, .25, 0, .75, .25, .25, .25, .75}
				},
				right = {
					tile = false,
					texture_coord = {.75, .25, .75, .75, 1, .25, 1, .75}
				},
				background = {
					tile = false,
					texture_coord = {.25, .25, .25, .75, .75, .25, .75, .75}
				}
			},
			widgets = {
				class_icon = {
					texture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\class_icons",
					chatAlphaMask = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\chatAlphaMask",
					width = 16, -- 64
					height = 16, -- 64
					points = {
						{"TOPLEFT", "window", "TOPLEFT", 4, -4} -- "TOPLEFT", "window", "TOPLEFT", -10, 12
					},
					is_round = false, -- true
					blank = {.5, .5, .5, .75, .75, .5, .75, .75},
					druid = {0, 0, 0, .25, .25, 0, .25, .25},
					hunter = {.25, 0, .25, .25, .5, 0, .5, .25},
					mage = {.5, 0, .5, .25, .75, 0, .75, .25},
					paladin = {.75, 0, .75, .25, 1, 0, 1, .25},
					priest = {0, .25, 0, .5, .25, .25, .25, .5},
					rogue = {.25, .25, .25, .5, .5, .25, .5, .5},
					shaman = {.5, .25, .5, .5, .75, .25, .75, .5},
					warlock = {.75, .25, .75, .5, 1, .25, 1, .5},
					warrior = {0, .5, 0, .75, .25, .5, .25, .75},
					deathknight = {.75, .5, .75, .75, 1, .5, 1, .75},
					gm = {.25, .5, .25, .75, .5, .5, .5, .75}
				},
				from = {
					points = {
						{"TOPLEFT", "window", "TOPLEFT", 24, -7} -- "TOPLEFT", "window", "TOPLEFT", 50, -8
					},
					font = "FriendsFont_Normal", -- GameFontNormalLarge
					font_color = "ffffff",
					font_height = 11, -- 16
					font_flags = "",
					use_class_color = true
				},
				char_info = {
					format = formatDetails,
					points = {
						{"TOPRIGHT", "window", "TOPRIGHT", -25, -7} -- "TOP", "window", "TOP", 0, -30
					},
					font = "FriendsFont_Normal", -- GameFontNormal
					font_color = "1883d1" -- ffffff
				},
				close = {
					state_hide = {
						NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\hide",
						PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\hide_pushed",
						HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
						HighlightAlphaMode = "ADD"
					},
					state_close = {
						NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\close",
						PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\close_pushed",
						HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
						HighlightAlphaMode = "ADD"
					},
					width = 16, -- 32
					height = 16, -- 32
					points = {
						{"TOPRIGHT", "window", "TOPRIGHT", -4, -4} -- "TOPRIGHT", "window", "TOPRIGHT", 4, 1
					}
				},
				history = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\history",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\history_pushed",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
					HighlightAlphaMode = "ADD",
					width = 16, -- 18
					height = 16, -- 18
					points = {
						{"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 44} -- "TOPRIGHT", "window", "TOPRIGHT", -28, -6
					}
				},
				w2w = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\w2w",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\w2w",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\w2w",
					HighlightAlphaMode = "ADD",
					points = {
						{"TOPLEFT", "class_icon", 14, -14},
						{"BOTTOMRIGHT", "class_icon", -14, 14}
					}
				},
				chat_info = {
					NormalTexture = "",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\w2w",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\w2w",
					HighlightAlphaMode = "ADD",
					points = {
						{"TOPLEFT", "class_icon", 14, -14},
						{"BOTTOMRIGHT", "class_icon", -14, 14}
					}
				},
				chatting = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\chatting",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\chatting",
					width = 16,
					height = 16,
					points = {
						{"TOPLEFT", "window", -3, -23} -- "TOPLEFT", "window", 45, -28
					}
				},
				scroll_up = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_up",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_up_pushed",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
					DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_disabled",
					HighlightAlphaMode = "ADD",
					width = 16, -- 32
					height = 16, -- 32
					points = {
						{"TOPRIGHT", "window", "TOPRIGHT", -3, -23} -- "TOPRIGHT", "window", "TOPRIGHT", -4, -39
					}
				},
				scroll_down = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_down",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_down_pushed",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
					DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_disabled",
					HighlightAlphaMode = "ADD",
					width = 16, -- 32
					height = 16, -- 32
					points = {
						{"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 27} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -4, 24
					}
				},
				chat_display = {
					points = {
						{"TOPLEFT", "window", "TOPLEFT", 4, -24}, -- "TOPLEFT", "window", "TOPLEFT", 24, -46
						{"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -22, 27} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -38, 39
					},
					font = "FriendsFont_UserText", -- ChatFontNormal
					font_height = 12,
					font_flags = ""
				},
				msg_box = {
					font = "FriendsFont_UserText", -- ChatFontNormal
					font_height = 14,
					font_color = {1,1,1},
					points = {
						{"TOPLEFT", "window", "BOTTOMLEFT", 6, 25}, -- "TOPLEFT", "window", "BOTTOMLEFT", 24, 30
						{"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 1} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -10, 4
					}
				},
				resize = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\resize",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\resize",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\resize",
					HighlightAlphaMode = "ADD",
					width = 16, -- 25
					height = 16, -- 25
					points = {
						{"BOTTOMLEFT", "window", "BOTTOMRIGHT", -16, 0} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", 5, -5
					}
				},
				shortcuts = {
					stack = "DOWN",
					spacing = 1, -- 2
					points = {
						{"TOPLEFT", "window", "TOPRIGHT", -19, -40}, -- "TOPLEFT", "window", "TOPRIGHT", -30, -70
						{"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 105} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -8, 55
					},
					buttons = {
						NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_frame",
						PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_pushed",
						HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
						HighlightAlphaMode = "ADD",
						icons = {
							location = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\location",
							invite = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\invite",
							friend = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\friend",
							ignore = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\ignore"
						}
					}
				}
			}
		},
		tab_strip = {
			textures = {
				tab = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\tab_normal",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\tab_selected",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\tab_flash",
				--	HighlightTexture = "Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight",
					HighlightAlphaMode = "ADD"
				},
				prev = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\prev",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\prev_pushed",
					DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\prev",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
					HighlightAlphaMode = "ADD",
					height = 16, -- 20
					width = 16 -- 20
				},
				next = {
					NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\next",
					PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\next_pushed",
					DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\next",
					HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
					HighlightAlphaMode = "ADD",
					height = 16, -- 20
					width = 16 -- 20
				}
			},
			height = 20, -- 26
			points = {
				{"BOTTOMLEFT", "window", "TOPLEFT", 18, 4}, -- "BOTTOMLEFT", "window", "TOPLEFT", 38, -4
				{"BOTTOMRIGHT", "window", "TOPRIGHT", -18, 4} -- "BOTTOMRIGHT", "window", "TOPRIGHT", -20, -4
			},
			text = {
				font = "SystemFont_Small", -- ChatFontNormal
				font_color = {1, 1, 1},
				font_height = 11, -- 12
				font_flags = ""
			},
			vertical = false
		}
	}

	local function ApplySkin(self)
		self.db.skin.selected = "WIM ElvUI"
		self.RegisterSkin(WIM_Elvui)

		WIM.constants.classes.GetMyColoredName = function()
			local name = UnitName("player")
			local color = E.media.herocolor
			if color then
				return string.format("\124cff%.2x%.2x%.2x", color.r*255, color.g*255, color.b*255)..name.."\124r"
			end

			return name
		end

		WIM.constants.classes.GetColoredNameByChatEvent = function(event, ...)
			local player, guid = select(2, ...), select(12, ...)
			if not guid then return player end
			local _, class = GetPlayerInfoByGUID(guid)
			local color = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class]
			if color then
				return color:WrapText(player)
			end

			return player
		end
	end

	if WIM.db then
		ApplySkin(WIM)
	else
		hooksecurefunc(WIM, "VARIABLES_LOADED", function(self)
			ApplySkin(self)
		end)
	end

	TutorialFrameTop.Show = E.noop
	TutorialFrameTop:Hide()
	TutorialFrameBottom.Show = E.noop
	TutorialFrameBottom:Hide()
end)