using System;
using System.Threading.Tasks;

namespace Elwig.Helpers.Weighing {
    /// <summary>
    /// Interface for controlling a weighing scale which responds to commands sent to it
    /// </summary>
    public interface ICommandScale : IScale {
        /// <summary>
        /// Get the current weight on the scale without performing a weighing process
        /// </summary>
        /// <returns>Result of the weighing process (probably without a weighing id)</returns>
        Task<WeighingResult> GetCurrentWeight();

        /// <summary>
        /// Perform a weighing process
        /// </summary>
        /// <returns>Result of the weighing process (including a weighing id)</returns>
        Task<WeighingResult> Weigh();

        /// <summary>
        /// Empty the scale container or grant clearance to do so
        /// </summary>
        Task Empty();

        /// <summary>
        /// Grant clearance to fill the scale container
        /// </summary>
        Task GrantFillingClearance();

        /// <summary>
        /// Revoke clearance to fill the scale container
        /// </summary>
        Task RevokeFillingClearance();

        /// <summary>
        /// Try to set date and time on the scale
        /// </summary>
        Task SetDateAndTime(DateTime dateTime);
    }
}
