local ____exports = {}
local ____cachedEnumValues = require("cachedEnumValues")
local SOUND_EFFECT_VALUES = ____cachedEnumValues.SOUND_EFFECT_VALUES
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
local sfxManager = ____cachedClasses.sfxManager
local ____stageToMusic = require("objects.stageToMusic")
local STAGE_TO_MUSIC = ____stageToMusic.STAGE_TO_MUSIC
local ____enums = require("functions.enums")
local getEnumValues = ____enums.getEnumValues
--- Helper function to get the corresponding music value for a stage and stage type combination.
-- 
-- @param stage Optional. The stage to get the music for. If not specified, the current stage will
-- be used.
-- @param stageType Optional. The stage type to get the music for. If not specified, the current
-- stage type will be used.
function ____exports.getMusicForStage(self, stage, stageType)
    local level = game:GetLevel()
    if stage == nil then
        stage = level:GetStage()
    end
    if stageType == nil then
        stageType = level:GetStageType()
    end
    local stageTypeToMusic = STAGE_TO_MUSIC[stage]
    return stageTypeToMusic[stageType]
end
--- Helper function to manually stop every vanilla sound effect. If you also want to stop custom
-- sound effects in addition to vanilla ones, then pass the `SoundEffectCustom` enum for your mod.
-- 
-- @param soundEffectCustom Optional. The enum that represents all of the custom sound effects for
-- your mod.
function ____exports.stopAllSoundEffects(self, soundEffectCustom)
    for ____, soundEffect in ipairs(SOUND_EFFECT_VALUES) do
        sfxManager:Stop(soundEffect)
    end
    if soundEffectCustom ~= nil then
        for ____, soundEffect in ipairs(getEnumValues(nil, soundEffectCustom)) do
            sfxManager:Stop(soundEffect)
        end
    end
end
return ____exports
