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

namespace Kean.Application.Command.Implements
{
    /// <summary>
    /// 控制交互聚合颗粒
    /// </summary>
    partial class AggregateGrain
    {
        /*
         * 实现 Kean.Application.Command.Interfaces.IAggregateGrain.AcceptInput 方法
         */
        public Task<(AcceptInputCommand Fallback, Failure Failure)> AcceptInput(AcceptInputCommand command) =>
            GrainFactory.GetGrain<IWcsGrain>(Guid.NewGuid()).AcceptInput(command);

        /*
         * 实现 Kean.Application.Command.Interfaces.IAggregateGrain.SyncOutput 方法
         */
        public Task<Failure> SyncOutput(SyncOutputCommand command) =>
            GrainFactory.GetGrain<IWcsGrain>(Guid.NewGuid()).SyncOutput(command);

        /*
         * 实现 Kean.Application.Command.Interfaces.IAggregateGrain.SyncStation 方法
         */
        public Task<Failure> SyncStation(SyncStationCommand command) =>
            GrainFactory.GetGrain<IWcsGrain>(Guid.NewGuid()).SyncStation(command);
    }
}