using System;
namespace PKHeX.Core;
///
/// Group that checks the source of a move in the games that it represents.
///
public interface IEvolutionGroup
{
///
/// Gets the previous (backward) generation group to traverse to continue processing.
///
IEvolutionGroup? GetPrevious(PKM pk, EvolutionOrigin enc);
///
/// Gets the next (forward) generation group to traverse to continue processing.
///
IEvolutionGroup? GetNext(PKM pk, EvolutionOrigin enc);
bool Append(PKM pk, EvolutionHistory history, ref ReadOnlySpan chain, EvolutionOrigin enc);
EvoCriteria[] GetInitialChain(PKM pk, EvolutionOrigin enc, ushort species, byte form);
}
///
/// Details about the original encounter.
///
/// Species the encounter originated as
/// Version the encounter originated on
/// Generation the encounter originated in
/// Minimum level the encounter originated at
/// Maximum level in final state
/// Skip enforcement of legality for evolution criteria
public readonly record struct EvolutionOrigin(ushort Species, byte Version, byte Generation, byte LevelMin, byte LevelMax, bool SkipChecks = false);