using PkmnLib.Static.Utils;
namespace PkmnLib.Dynamic.ScriptHandling;
///
/// A script set is a collection of scripts that can be accessed by a key.
/// We can add, remove, and clear scripts from the set.
/// This is generally used for volatile scripts.
///
public interface IScriptSet : IEnumerable
{
///
/// Adds a script to the set. If the script with that name already exists in this set, this
/// makes that script stack instead. The return value here is that script.
///
ScriptContainer Add(Script script);
///
/// Adds a script with a name to the set. If the script with that name already exists in this
/// set, this makes that script stack instead. The return value here is that script.
///
ScriptContainer? Add(StringKey scriptKey);
///
/// Gets a script from the set using its unique name.
///
ScriptContainer? Get(StringKey scriptKey);
///
/// Removes a script from the set using its unique name.
///
void Remove(StringKey scriptKey);
///
/// Clears all scripts from the set.
///
void Clear();
///
/// Checks if the set has a script with the given name.
///
void Contains(StringKey scriptKey);
///
/// Gets a script from the set at a specific index.
///
ScriptContainer At(int index);
///
/// Gets the number of scripts in the set.
///
int Count { get; }
///
/// Gets the names of all scripts in the set.
///
IEnumerable GetScriptNames();
}