Code/IconifyOptions.cs
using Sandbox;

namespace Iconify;

/// <summary>
/// Contains all configurable options in the Iconify library.
/// </summary>
public class IconifyOptions
{
	/// <summary>
	/// The instance of <see cref="IconifyOptions"/> that the library will use.
	/// </summary>
	public static IconifyOptions Current { get; set; }

	/// <summary>
	/// The file system that cached icons will be written to. 
	/// </summary>
	public BaseFileSystem CacheFileSystem { get; set; } = FileSystem.Data;

	static IconifyOptions()
	{
		if ( FileSystem.Data is null )
			return;

		FileSystem.Data.CreateDirectory( "iconify" );
		Current = new IconifyOptions()
			.WithCacheFileSystem( FileSystem.Data.CreateSubSystem( "iconify" ) );
	}

	/// <summary>
	/// Sets the <see cref="CacheFileSystem"/> property.
	/// </summary>
	/// <param name="fs">The file system that cached icons will be written to.</param>
	/// <returns>The same instance of <see cref="IconifyOptions"/>.</returns>
	public IconifyOptions WithCacheFileSystem( BaseFileSystem fs )
	{
		CacheFileSystem = fs;
		return this;
	}
}