local _, addon = ...
local API = addon.API;

local PlaySoundFile = PlaySoundFile;
local PlaySoundKit = PlaySound;

--[[
local SoundPanel = CreateFrame("Frame");

function SoundPanel:OnUpdate(elapsed)
    self.t = self.t + elapsed;
    if self.t > 0.1 then
        self.t = 0;
        self:Unlock();
    end
end

function SoundPanel:Start()
    if not self.isPlaying then
        self.isPlaying = true;
        self.t = 0;
        self:SetScript("OnUpdate", self.OnUpdate);
    end
end

function SoundPanel:Unlock()
    self.isPlaying = nil;
    self:SetScript("OnUpdate", nil);
end

--]]

local PATH = "Interface/AddOns/DialogueUI/Sound/";
local SOUNDS = {
    DIALOG_OPTION_CLICK = "paper-collect-1.mp3",
    DIALOG_OPTION_ENTER = "paper-collect-2.mp3",
    QUEST_TEXT_SHOW = "page-turn-1.mp3",
};

local SOUNDKIT = SOUNDKIT or {};
local SOUND_KIT = {
    ["SOUNDKIT.IG_QUEST_LIST_OPEN"] = SOUNDKIT.IG_QUEST_LIST_OPEN,
    ["CHECKBOX_ON"] = SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON,
    ["CHECKBOX_OFF"] = SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_OFF,
};

local function PlaySound(name)
    if SOUNDS[name] then
        PlaySoundFile(PATH..SOUNDS[name]);
    elseif SOUND_KIT[name] then
        PlaySoundKit(SOUND_KIT[name])
    end
end
addon.PlaySound = PlaySound;


do  --Mute Target Lost Sound while interacting with NPC     --Mute UI open/close sound briefly
    --https://wago.tools/db2/SoundKitEntry?filter[SoundKitID]=684&page=1&sort[SoundKitID]=asc
    --local soundKitID = (SOUNDKIT and SOUNDKIT.INTERFACE_SOUND_LOST_TARGET_UNIT) or 684;

    local SHOULD_MUTE_FILE = true;
    local SOUND_FILE_ID = 567520;
    local MuteSoundFile = MuteSoundFile;
    local UnmuteSoundFile = UnmuteSoundFile;

    local function MuteTargetLostSound()
        if SHOULD_MUTE_FILE then
            MuteSoundFile(SOUND_FILE_ID);
        end
    end

    local function UnmuteTargetLostSound()
        if SHOULD_MUTE_FILE then
            UnmuteSoundFile(SOUND_FILE_ID);
        end
    end

    addon.CallbackRegistry:Register("DialogueUI.Show", MuteTargetLostSound);
    addon.CallbackRegistry:Register("DialogueUI.Hide", UnmuteTargetLostSound);


    local function BrieflyMuteUIOpenHideSound()
        --SOUNDKIT.IG_MAINMENU_OPEN, SOUNDKIT.IG_MAINMENU_CLOSE
        local s1, s2 = 567490, 567464;
        MuteSoundFile(s1);
        MuteSoundFile(s2);
        C_Timer.After(0.03, function()
            UnmuteSoundFile(s1);
            UnmuteSoundFile(s2);
        end);
    end
    API.BrieflyMuteUIOpenHideSound = BrieflyMuteUIOpenHideSound;


    local function Settings_MuteTargetLostSound(dbValue)
        if dbValue == false then
            SHOULD_MUTE_FILE = false;
        else
            SHOULD_MUTE_FILE = true;
        end
    end
    addon.CallbackRegistry:Register("SettingChanged.MuteTargetLostSound", Settings_MuteTargetLostSound);
end