// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using osu.Framework.Audio;
using osu.Framework.Graphics.Rendering;
using osu.Framework.Graphics.Textures;
using osu.Framework.IO.Stores;
using osu.Game.Database;

namespace osu.Game.IO
{
    public interface IStorageResourceProvider
    {
        /// <summary>
        /// The game renderer.
        /// </summary>
        IRenderer Renderer { get; }

        /// <summary>
        /// Retrieve the game-wide audio manager.
        /// </summary>
        AudioManager? AudioManager { get; }

        /// <summary>
        /// Access game-wide user files.
        /// </summary>
        IResourceStore<byte[]> Files { get; }

        /// <summary>
        /// Access game-wide resources.
        /// </summary>
        IResourceStore<byte[]> Resources { get; }

        /// <summary>
        /// Access realm.
        /// </summary>
        RealmAccess RealmAccess { get; }

        /// <summary>
        /// Create a texture loader store based on an underlying data store.
        /// </summary>
        /// <param name="underlyingStore">The underlying provider of texture data (in arbitrary image formats).</param>
        /// <returns>A texture loader store.</returns>
        IResourceStore<TextureUpload>? CreateTextureLoaderStore(IResourceStore<byte[]> underlyingStore);
    }
}