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

namespace Admin.Core.IService
{
    /// <summary>
    /// IBaseSpaceInfoServices
    /// </summary>	
    public interface IBaseSpaceInfoServices : IBaseServices<BaseSpaceInfo>
    {
        /// <summary>
        /// 入库通过物料类型获取指定货道,如果没有对应类型的货道返回空白类型的货道
        /// </summary>
        /// <param name="store"></param>
        /// <param name="materialType"></param>
        /// <returns></returns>
        Task<List<BaseSpaceInfo>> InStoreGetSpaceInfoByMaterialType(string store, string materialType);

        /// <summary>
        /// 出库通过物料类型获取指定货道
        /// </summary>
        /// <param name="store"></param>
        /// <param name="materialType"></param>
        /// <returns></returns>
        Task<List<BaseSpaceInfo>> OutStoreGetSpaceInfoByMaterialCode(string store, string materialCode);

        /// <summary>
        /// 通过货道编号获取货道信息
        /// </summary>
        /// <param name="store"></param>
        /// <param name="spaceCode"></param>
        /// <returns></returns>
        Task<BaseSpaceInfo> GetSpaceInfoBySpaceCode(string store, string spaceCode);
        /// <summary>
        /// 通过仓库编号获取货道信息
        /// </summary>
        /// <param name="storeCode"></param>
        /// <returns></returns>
        Task<List<BaseSpaceInfo>> GetSpaceInfosByStoreCode(string storeCode);
        /// <summary>
        /// 更新货道信息
        /// </summary>
        /// <param name="spaceInfo"></param>
        /// <returns></returns>
        Task<bool> UpdateSpaceInfo(BaseSpaceInfo spaceInfo);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="shellStoreCode"></param>
        /// <param name="linerStoreCode"></param>
        /// <returns></returns>
        Task< List<dynamic>> GetMaterialStock(string shellStoreCode, string linerStoreCode);

        /// <summary>
        /// 通过物料类型获取货道信息,如果没有返回空白货道
        /// </summary>
        /// <param name="storeCode"></param>
        /// <param name="materialType"></param>
        /// <returns></returns>
        Task<List<BaseSpaceInfo>> GetBaseSpaceInfosByMaterialType(string storeCode, string materialType);

        /// <summary>
        /// 获取空货道:未分配物料型号的空白货道
        /// </summary>
        /// <returns></returns>
        Task<List<BaseSpaceInfo>> GetEmptySpaceInfo(string store);

        List<BaseSpaceInfo> GetSpaceInfos(string storeCode);
    }
}