﻿local Postal = LibStub("AceAddon-3.0"):GetAddon("Postal")
local Postal_Wire = Postal:NewModule("Wire", "AceHook-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("Postal")
Postal_Wire.description = L["Set subject field to value of coins sent if subject is blank."]

local g, s, c
g = "^%["..GOLD_AMOUNT.." "..SILVER_AMOUNT.." "..COPPER_AMOUNT.."%]$"
s = "^%["..SILVER_AMOUNT.." "..COPPER_AMOUNT.."%]$"
c = "^%["..COPPER_AMOUNT.."%]$"
if GetLocale() == "ruRU" then
	--Because ruRU has these escaped strings which can't be in mail subjects.
	--COPPER_AMOUNT = "%d |4медная монета:медные монеты:медных монет;"; -- Lowest value coin denomination
	--SILVER_AMOUNT = "%d |4серебряная:серебряные:серебряных;"; -- Mid value coin denomination
	--GOLD_AMOUNT = "%d |4золотая:золотые:золотых;"; -- Highest value coin denomination
	g = "^%[%d+з %d+с %d+м%]$"
	s = "^%[%d+с %d+м%]$"
	c = "^%[%d+м%]$"
end
g = gsub(g, "%%d", "%%d+")
s = gsub(s, "%%d", "%%d+")
c = gsub(c, "%%d", "%%d+")

function Postal_Wire:OnEnable()
	-- Secure hook so that it calls the original function
	self:SecureHook(SendMailMoney, "onValueChangedFunc")
end

-- Disabling modules unregisters all events/hook automatically
--function Postal_Wire:OnDisable()
--end

function Postal_Wire:onValueChangedFunc()
	local subject = SendMailSubjectEditBox:GetText()
	if subject == "" or subject:find(g) or subject:find(s) or subject:find(c) then
		local money = MoneyInputFrame_GetCopper(SendMailMoney)
		if money and money > 0 then
			local gold = floor(money / 10000)
			local silver = floor((money - gold * 10000) / 100)
			local copper = mod(money, 100)
			if GetLocale() == "ruRU" then
				if gold > 0 then
					SendMailSubjectEditBox:SetText(format("[%d+з %d+с %d+м]", gold, silver, copper))
				elseif silver > 0 then
					SendMailSubjectEditBox:SetText(format("[%d+с %d+м]", silver, copper))
				else
					SendMailSubjectEditBox:SetText(format("[%d+м]", copper))
				end
			else
				if gold > 0 then
					SendMailSubjectEditBox:SetText(format("["..GOLD_AMOUNT.." "..SILVER_AMOUNT.." "..COPPER_AMOUNT.."]", gold, silver, copper))
				elseif silver > 0 then
					SendMailSubjectEditBox:SetText(format("["..SILVER_AMOUNT.." "..COPPER_AMOUNT.."]", silver, copper))
				else
					SendMailSubjectEditBox:SetText(format("["..COPPER_AMOUNT.."]", copper))
				end
			end
		else
			SendMailSubjectEditBox:SetText("")
		end
	end
end
