using Glamourer.Automation;
using OtterGui.Classes;
namespace Glamourer.Events;
///
/// Triggered when an automated design is changed in any way.
///
/// - Parameter is the type of the change
/// - Parameter is the added or changed design set or null on deletion.
/// - Parameter is additional data depending on the type of change.
///
///
public sealed class AutomationChanged()
: EventWrapper(nameof(AutomationChanged))
{
public enum Type
{
/// Add a new set. Names and identifiers do not have to be unique. It is not enabled by default. Additional data is the index it gets added at and the name [(int, string)].
AddedSet,
/// Delete a given set. Additional data is the index it got removed from [int].
DeletedSet,
/// Rename a given set. Names do not have to be unique. Additional data is the old name and the new name [(string, string)].
RenamedSet,
/// Move a given set to a different position. Additional data is the old index of the set and the new index of the set [(int, int)].
MovedSet,
/// Change the identifier a given set is associated with to another one. Additional data is the old identifier and the new one, and a potentially disabled other design set. [(ActorIdentifier[], ActorIdentifier, AutoDesignSet?)].
ChangeIdentifier,
/// Toggle the enabled state of a given set. Additional data is the thus disabled other set, if any [AutoDesignSet?].
ToggleSet,
/// Change the used base state of a given set. Additional data is prior and new base. [(AutoDesignSet.Base, AutoDesignSet.Base)].
ChangedBase,
/// Add a new associated design to a given set. Additional data is the index it got added at [int].
AddedDesign,
/// Remove a given associated design from a given set. Additional data is the index it got removed from [int].
DeletedDesign,
/// Move a given associated design in the list of a given set. Additional data is the index that got moved and the index it got moved to [(int, int)].
MovedDesign,
/// Change the linked design in an associated design for a given set. Additional data is the index of the changed associated design, the old linked design and the new linked design [(int, IDesignStandIn, IDesignStandIn)].
ChangedDesign,
/// Change the job condition in an associated design for a given set. Additional data is the index of the changed associated design, the old job group and the new job group [(int, JobGroup, JobGroup)].
ChangedConditions,
/// Change the application type in an associated design for a given set. Additional data is the index of the changed associated design, the old type and the new type. [(int, AutoDesign.Type, AutoDesign.Type)].
ChangedType,
/// Change the additional data for a specific design type. Additional data is the index of the changed associated design and the new data. [(int, object)]
ChangedData,
}
public enum Priority
{
///
SetSelector = 0,
///
AutoDesignApplier = 0,
///
RandomRestrictionDrawer = -1,
}
}