local ADDON_PATH = "Interface\\AddOns\\Zdarova\\"

local HELLO_SOUND = ADDON_PATH .. "zdarova.mp3"

-- два варианта прощания
local BYE_SOUNDS = {
    ADDON_PATH .. "poka.mp3",
    ADDON_PATH .. "poka2.mp3",
}

local f = CreateFrame("Frame")

local savedDialogVolume = nil
local dialogMuted = false
local dialogOpen = false

local function MuteDialogVO()
    if dialogMuted then return end

    if savedDialogVolume == nil then
        savedDialogVolume = tonumber(GetCVar("Sound_DialogVolume")) or 1
    end

    SetCVar("Sound_DialogVolume", "0")
    dialogMuted = true
end

local function RestoreDialogVO()
    if not dialogMuted then return end

    SetCVar("Sound_DialogVolume", tostring(savedDialogVolume or 1))
    dialogMuted = false
end

local function PlaySafe(path)
    if path then
        PlaySoundFile(path, "Master")
    end
end

local function PlayRandomBye()
    if not BYE_SOUNDS or #BYE_SOUNDS == 0 then return end
    local idx = math.random(1, #BYE_SOUNDS)
    PlaySafe(BYE_SOUNDS[idx])
end

local OPEN_EVENTS = {
    "GOSSIP_SHOW",
    "QUEST_GREETING",
    "QUEST_DETAIL",
    "QUEST_PROGRESS",
    "QUEST_COMPLETE",
}

local CLOSE_EVENTS = {
    "GOSSIP_CLOSED",
    "QUEST_FINISHED",
}

for _, e in ipairs(OPEN_EVENTS) do
    f:RegisterEvent(e)
end

for _, e in ipairs(CLOSE_EVENTS) do
    f:RegisterEvent(e)
end

f:SetScript("OnEvent", function(_, event)

    -- Открытие диалога
    if event == "GOSSIP_SHOW"
        or event == "QUEST_GREETING"
        or event == "QUEST_DETAIL"
        or event == "QUEST_PROGRESS"
        or event == "QUEST_COMPLETE" then

        if not dialogOpen then
            dialogOpen = true
            MuteDialogVO()
            PlaySafe(HELLO_SOUND)
        end
        return
    end

    -- Закрытие диалога
    if event == "GOSSIP_CLOSED" or event == "QUEST_FINISHED" then
        if dialogOpen then
            dialogOpen = false
            PlayRandomBye()
            RestoreDialogVO()
        end
    end
end)
