Editor/PbrGeneratorPreferences.cs
using System;
using Sandbox;

public sealed class PbrGeneratorPreferences
{
	private const string CookieKey = "SeamLess.PbrGenerator.Preferences.v1";

	public string OutputFolder { get; set; } = "";
	public bool OutputFolderFollowsSource { get; set; } = true;
	public PbrMapType SelectedMap { get; set; } = PbrMapType.Albedo;
	public PbrPreviewLayout PreviewLayout { get; set; } = PbrPreviewLayout.Atlas;
	public PbrPreviewShape PreviewShape { get; set; } = PbrPreviewShape.Sphere;
	public bool ExperimentalMaterialPreviewEnabled { get; set; }
	public bool AutoRefreshMaterialPreview { get; set; }
	public bool ParallaxMaterialPreviewEnabled { get; set; }

	public static PbrGeneratorPreferences Load()
	{
		try
		{
			var preferences = ProjectCookie.Get( CookieKey, new PbrGeneratorPreferences() ) ?? new PbrGeneratorPreferences();
			preferences.ClampValues();
			return preferences;
		}
		catch ( Exception ex )
		{
			Log.Info( $"Seam-Less PBR: Could not load saved preferences: {ex.Message}" );
			return new PbrGeneratorPreferences();
		}
	}

	public static void Save( PbrGeneratorPreferences preferences )
	{
		if ( preferences == null )
			return;

		try
		{
			preferences.ClampValues();
			ProjectCookie.Set( CookieKey, preferences );
		}
		catch ( Exception ex )
		{
			Log.Info( $"Seam-Less PBR: Could not save preferences: {ex.Message}" );
		}
	}

	private void ClampValues()
	{
		OutputFolder ??= "";

		if ( OutputFolderFollowsSource )
			OutputFolder = "";

		if ( !Enum.IsDefined( typeof( PbrMapType ), SelectedMap ) )
			SelectedMap = PbrMapType.Albedo;

		if ( !Enum.IsDefined( typeof( PbrPreviewLayout ), PreviewLayout ) )
			PreviewLayout = PbrPreviewLayout.Atlas;

		if ( !Enum.IsDefined( typeof( PbrPreviewShape ), PreviewShape ) )
			PreviewShape = PbrPreviewShape.Sphere;
	}
}