Editor/sandmod.libraryplus/Library/LibraryFileSystem.cs
using System;
using System.IO;

namespace LibraryPlus;

public abstract class LibraryFileSystem
{
	internal LibraryFileSystem( Func<string, string> path )
	{
		Assets = new DirectoryInfo( path( "Assets" ) );
		Code = new DirectoryInfo( path( "Code" ) );
		Editor = new DirectoryInfo( path( "Editor" ) );
		UnitTests = new DirectoryInfo( path( "UnitTests" ) );
		Settings = new DirectoryInfo( path( "Settings" ) );
	}

	public DirectoryInfo Assets { get; }
	public DirectoryInfo Code { get; }
	public DirectoryInfo Editor { get; }
	public DirectoryInfo UnitTests { get; }
	public DirectoryInfo Settings { get; }

	internal void Move( LibraryFileSystem target )
	{
		Assets.MoveIfNeeded( target.Assets.FullName );
		Code.MoveIfNeeded( target.Code.FullName );
		Editor.MoveIfNeeded( target.Editor.FullName );
		UnitTests.MoveIfNeeded( target.UnitTests.FullName );
		Directory.CreateDirectory( target.Settings.FullName );
		foreach ( var file in Settings.GetFiles() )
		{
			file.MoveTo( Path.Combine( target.Settings.FullName, file.Name ) );
		}

		Directory.Delete( Settings.FullName, true );
	}

	internal void Delete()
	{
		Assets.DeleteIfNeeded( true );
		Code.DeleteIfNeeded( true );
		Editor.DeleteIfNeeded( true );
		UnitTests.DeleteIfNeeded( true );
		Settings.DeleteIfNeeded( true );
	}
}