using Toolbox.Docking.Api.Control;

namespace Toolbox.Docking.Api.Objects.Metabolism
{
    /// <summary>
    /// Toolbox metabolism object.
    /// </summary>
    public interface ITbMetabolism : ITbObject
    {
        /// <summary>
        /// Returns the number of alternative metabolisms for the target chemical. For instance
        /// when there are two observed metabolite trees for a chemical.
        /// </summary>
        /// <param name="target">The basket </param>
        /// <returns>
        /// Number of metabolte trees.
        /// </returns>
        int AlternativeObserved(ITbBasket target);

        /// <summary>
        /// Metabolizes the chemical in the target work basket.
        /// </summary>
        /// <param name="target">
        /// The basket containing the chemical to be metabolized.
        /// </param>
        /// <param name="alternativeObserved">
        /// If the AlternativeObserved has indicated multiple available metabolisms this is
        /// used to specify which one should be returned.
        /// </param>
        /// <returns>
        /// The resulting MetaboResult.
        /// </returns>
        MetabolResult GetProducts(ITbBasket target, int alternativeObserved);
    }
}