using Admin.Core.Model;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Admin.Core.IService
{
    /// <summary>
    /// IRealTaskInfoServices
    /// </summary>	
    public interface IRealTaskInfoServices : IBaseServices<RealTaskInfo>
    {
        /// <summary>
        /// 添加任务信息
        /// </summary>
        /// <param name="taskInfo"></param>
        /// <returns></returns>
        Task<bool> AddTaskInfo(RealTaskInfo taskInfo);

        /// <summary>
        /// 更新任务信息
        /// </summary>
        /// <param name="taskInfo"></param>
        /// <returns></returns>
        Task<bool> UpdateTaskInfo(RealTaskInfo taskInfo);

        /// <summary>
        /// 批量修改任务信息
        /// </summary>
        /// <param name="taskInfos"></param>
        /// <returns></returns>
        Task<bool> UpdateRangeTaskInfo(List<RealTaskInfo> taskInfos);

        /// <summary>
        /// 删除任务信息
        /// </summary>
        /// <param name="taskInfo"></param>
        Task<bool> DeleteTaskInfo(string taskCode, string storeCode = null);

        /// <summary>
        /// 通过任务编号更新任务状态
        /// </summary>
        /// <param name="taskCode"></param>
        /// <param name="taskStatus"></param>
        /// <returns></returns>
        Task<bool> UpdateTaskStatusByTaskCode(string taskCode, int taskStatus);

        /// <summary>
        /// 通过仓库编号获取待执行的任务信息,根据时间依次获取
        /// </summary>
        /// <param name="storeCode"></param>
        /// <returns></returns>
        Task<RealTaskInfo> GetTaskInfoByStoreCode(string storeCode, int taskType);

        /// <summary>
        /// 通过任务号获取任务信息
        /// </summary>
        /// <param name="taskCode"></param>
        /// <returns></returns>
        Task<RealTaskInfo> GetTaskInfoByTaskCode(string taskCode, string storeCode);

        /// <summary>
        /// 通过仓库编号获取任务
        /// </summary>
        /// <param name="storeCode"></param>
        /// <param name="taskType"></param>
        /// <returns></returns>
        Task<List<RealTaskInfo>> GetTaskInfosByStoreCode(string[] storeCode, int taskType);

        Task<List<RealTaskInfo>> GetTaskInfosByTaskCode(string taskCode);

        Task<bool> DeleteTaskInfoById(int id);

        /// <summary>
        /// 获取指定状态的任务列表
        /// </summary>
        /// <param name="storeCode"></param>
        /// <param name="taskType"></param>
        /// <param name="taskStatus">0返回所有状态;1-待执行;2-执行中;3-已完成</param>
        /// <returns></returns>
        Task<List<RealTaskInfo>> GetTaskInfosByTaskStatus(string[] storeCode, int taskType, int taskStatus);

    }
}