using Lumina.Data;
namespace Penumbra.Api.Api;
/// API methods pertaining to the resolving of paths.
public interface IPenumbraApiResolve
{
///
/// Resolve a given via Penumbra using the Base collection.
///
/// The resolved path, or the given path if Penumbra would not manipulate it.
public string ResolveDefaultPath(string gamePath);
///
/// Resolve a given via Penumbra using the Interface collection.
///
/// The resolved path, or the given path if Penumbra would not manipulate it.
public string ResolveInterfacePath(string gamePath);
///
/// Resolve a given via Penumbra using collection applying to the
/// given by its index in the game object table.
///
/// If the object does not exist in the table, the default collection is used.
/// The resolved path, or the given path if Penumbra would not manipulate it.
public string ResolveGameObjectPath(string gamePath, int gameObjectIdx);
///
/// Resolve a given via Penumbra using the collection currently applying to the player character.
///
/// The resolved path, or the given path if Penumbra would not manipulate it.
public string ResolvePlayerPath(string gamePath);
///
/// Reverse resolves a given local into its replacement in form of all applicable game paths
/// for the collection applying to the th game object in the game object table.
///
/// If the object does not exist in the table, the default collection is used.
/// A list of game paths resolving to the modded path.
public string[] ReverseResolveGameObjectPath(string moddedPath, int gameObjectIdx);
///
/// Reverse resolves a given local into its replacement in form of all applicable game paths
/// for the collection currently applying to the player character.
///
/// A list of game paths resolving to the modded path.
public string[] ReverseResolvePlayerPath(string moddedPath);
///
/// Resolve all game paths in and reserve all paths in at once.
///
/// Paths to forward-resolve.
/// Paths to reverse-resolve.
/// A pair of an array of forward-resolved single paths of the same length as and an array of arrays of reverse-resolved paths.
/// The outer array has the same length as while each inner array can have arbitrary length.
public (string[], string[][]) ResolvePlayerPaths(string[] forward, string[] reverse);
///
/// Resolve all game paths in and reserve all paths in at once asynchronously.
///
///
/// Can be called from outside of framework. Can theoretically produce incoherent state when collections change during evaluation.
public Task<(string[], string[][])> ResolvePlayerPathsAsync(string[] forward, string[] reverse);
}