using Spectre.Console;
namespace Recyclarr.Cli.Migration.Steps;
public interface IMigrationStep
{
///
/// Determines the order in which this migration step will run.
///
int Order { get; }
///
/// A description printed to the user so that they understand the purpose of this migration step, and
/// what it does.
///
string Description { get; }
///
/// One or more strings that individually represent a distinct manual solution that a user can attempt
/// when this migration step fails.
///
IReadOnlyCollection Remediation { get; }
///
/// Determines if this migration step is required. If so, it must be executed before the program may be
/// used normally.
///
bool Required { get; }
///
/// Run logic to determine if this migration step is necessary
///
///
/// Return true if this migration step is needed and should be run. False means the migration step is
/// not needed and Execute() will not be called.
///
bool CheckIfNeeded();
///
/// Execute the logic necessary for this migration step.
///
///
/// Use the console to print additional debug diagnostics. If this parameter is null, that means those
/// diagnostics should not be printed.
///
void Execute(IAnsiConsole? console);
}