using Kean.Application.Command.ViewModels;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Kean.Application.Command.Interfaces
{
    /// <summary>
    /// 表示订单命令服务
    /// </summary>
    public interface IOrderService
    {
        /// <summary>
        /// 创建订单类型
        /// </summary>
        /// <param name="type">订单类型视图</param>
        /// <returns>分配的 ID 及失败信息</returns>
        Task<(int Id, Failure Failure)> CreateType(Ordtyp type);

        /// <summary>
        /// 修改订单类型
        /// </summary>
        /// <param name="type">订单类型视图</param>
        /// <returns>操作结果及失败信息</returns>
        Task<(bool Success, Failure Failure)> ModifyType(Ordtyp type);

        /// <summary>
        /// 删除订单类型
        /// </summary>
        /// <param name="id">类型 ID</param>
        /// <returns>操作结果及失败信息</returns>
        Task<(bool Success, Failure Failure)> DeleteType(int id);

        /// <summary>
        /// 创建工作流
        /// </summary>
        /// <param name="flow">工作流视图</param>
        /// <returns>分配的 ID 及失败信息</returns>
        Task<(int Id, Failure Failure)> CreateFlow(Flow flow);

        /// <summary>
        /// 修改工作流
        /// </summary>
        /// <param name="type">工作流视图</param>
        /// <returns>操作结果及失败信息</returns>
        Task<(bool Success, Failure Failure)> ModifyFlow(Flow flow);

        /// <summary>
        /// 删除工作流
        /// </summary>
        /// <param name="id">工作流 ID</param>
        /// <returns>操作结果及失败信息</returns>
        Task<(bool Success, Failure Failure)> DeleteFlow(int id);

        /// <summary>
        /// 创建订单实例
        /// </summary>
        /// <param name="order">订单视图</param>
        /// <returns>分配的 ID 及失败信息</returns>
        Task<(int Id, Failure Failure)> CreateOrder(Order order);

        /// <summary>
        /// 修改订单实例
        /// </summary>
        /// <param name="order">订单视图</param>
        /// <returns>操作结果及失败信息</returns>
        Task<(bool Success, Failure Failure)> ModifyOrder(Order order);

        /// <summary>
        /// 删除订单实例
        /// </summary>
        /// <param name="id">订单 ID</param>
        /// <param name="state">状态</param>
        System.Threading.Tasks.Task DeleteOrder(int id, bool state);
    }
}