using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using OneOf;
// ReSharper disable InconsistentNaming
namespace Barotrauma.LuaCs.Services;
public interface IAssemblyManagementService : IReusableService
{
///
/// Searches for an assembly given it's fully qualified name, while excluding the contexts with the given Guids, if supplied.
///
/// The assembly info.
/// Guids of excluded contexts.
/// On Success: The assembly.
On Failure: nothing.
FluentResults.Result GetLoadedAssembly(OneOf assemblyName, in Guid[] excludedContexts);
///
/// Gets all for all service-managed assemblies.
///
/// collection for all service-managed, and default if selected, assemblies, if any are found. Returns an empty collection otherwise.
ImmutableArray GetDefaultMetadataReferences(bool includeDefaultContext = true);
///
/// Returns all active, managed assembly loaders.
///
ImmutableArray AssemblyLoaderServices { get; }
}