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

namespace Kean.Application.Query.Interfaces
{
    /// <summary>
    /// 表示订单信息查询服务
    /// </summary>
    public interface IOrderService
    {
        /// <summary>
        /// 获取订单类型
        /// </summary>
        /// <returns>结果视图</returns>
        Task<IEnumerable<Ordtyp>> GetTypeList();

        /// <summary>
        /// 获取系统行为
        /// </summary>
        /// <returns>结果视图</returns>
        Task<IEnumerable<string>> GetActionList();

        /// <summary>
        /// 获取工作流
        /// </summary>
        /// <returns>结果视图</returns>
        Task<IEnumerable<Flow>> GetFlowList();

        /// <summary>
        /// 获取实例数量
        /// </summary>
        /// <param name="type">类型</param>
        /// <param name="flow">工作流</param>
        /// <param name="node">节点</param>
        /// <param name="no">单号</param>
        /// <param name="creater">制单人</param>
        /// <param name="createFrom">创建时间头</param>
        /// <param name="createTo">创建时间尾</param>
        /// <returns>结果</returns>
        Task<int> GetOrderCount(
            int? type,
            int? flow,
            int? node,
            string no,
            string creater,
            DateTime? createFrom,
            DateTime? createTo);

        /// <summary>
        /// 获取实例列表
        /// </summary>
        /// <param name="type">类型</param>
        /// <param name="flow">工作流</param>
        /// <param name="node">节点</param>
        /// <param name="no">单号</param>
        /// <param name="creater">制单人</param>
        /// <param name="createFrom">创建时间头</param>
        /// <param name="createTo">创建时间尾</param>
        /// <param name="sort">排序</param>
        /// <param name="offset">偏移</param>
        /// <param name="limit">限制</param>
        /// <returns>结果视图</returns>
        Task<IEnumerable<Order>> GetOrderList(
            int? type,
            int? flow,
            int? node,
            string no,
            string creater,
            DateTime? createFrom,
            DateTime? createTo,
            string sort,
            int? offset,
            int? limit);

        /// <summary>
        /// 获取行数量
        /// </summary>
        /// <param name="id">订单</param>
        /// <returns>结果</returns>
        Task<int> GetLineCount(
            int? id);

        /// <summary>
        /// 获取行列表
        /// </summary>
        /// <param name="id">订单</param>
        /// <param name="sort">排序</param>
        /// <param name="offset">偏移</param>
        /// <param name="limit">限制</param>
        /// <returns>结果视图</returns>
        Task<IEnumerable<Order>> GetLineList(
            int? id,
            string sort,
            int? offset,
            int? limit);
    }
}