using Kean.Application.Command.ViewModels;
using Kean.Domain.Wcs.Commands;
using Orleans;
using System.Threading.Tasks;

namespace Kean.Application.Command.Interfaces
{
    /// <summary>
    /// 表示控制交互颗粒
    /// </summary>
    internal interface IWcsGrain : IGrainWithGuidKey
    {
        /// <summary>
        /// 串行接受输入指令
        /// </summary>
        /// <param name="command">命令</param>
        /// <returns>降级指令及失败信息</returns>
        Task<(AcceptInputCommand Fallback, Failure Failure)> AcceptInput(AcceptInputCommand command);

        /// <summary>
        /// 串行同步输出指令
        /// </summary>
        /// <param name="command">命令</param>
        /// <returns>失败信息</returns>
        Task<Failure> SyncOutput(SyncOutputCommand command);

        /// <summary>
        /// 串行同步站台
        /// </summary>
        /// <param name="command">命令</param>
        /// <returns>失败信息</returns>
        Task<Failure> SyncStation(SyncStationCommand command);

    }
}