using System;
using MasaBlazorApp3.Pojo;
using MasaBlazorApp3.Pojo.Vo;

namespace MasaBlazorApp3.DataAccess.Dao
{
    public interface IChannelListDao
    {
        public Task<PageData<ChannelStock>> GetAllChannelList(int DrawerType, string drugName, int? take, int? skip);

        public Task<List<ChannelStock>> GetChannelStockByDrugId(string DrugId);
        public Task<List<ChannelList>> GetChannelListByDrawerNo(int DrawerNo);
        public Task<List<ChannelStock>> GetChannelStockByDrawerNo(int DrawerNo, int Quantity = 0);


        public Task<List<ChannelStock>> GetAllDrugChannelStock();

        public Task<List<ChannelList>> GetAllDrugChannelList();

        public Task<bool> DrawerOperationFinish(List<ChannelStock> Stocks, int type,BoxModel boxNum,List<ChannelList> channelLists);

        public Task<bool> UnBind(string id);

        public Task<bool> Bind(ChannelStock Stock);


        Task<PageMultiData<ChannelStock,DrugInfo>> GetAllChannelListWithDrug(int DrawerType, string drugName, int? take, int? skip);

        Task<ChannelStockWithDrawerCount<ChannelStock>> GetChannelStockByDrawerNoWithDrawers(int DrawerNo, int Quantity = 0);

        //盘点
        public Task<bool> DrawerCheckFinish(List<ChannelStock> Stocks);
        //抽屉获取库存数据--药品绑定
        Task<ChannelStockWithDrawerCount<ChannelStock>> GetChannelStockByBiaoDing(int DrawerNo, int Quantity=0);
        //手术室药盒获取绑定数据
        Task<PageMultiData<ChannelList, Plan>> GetAllChannelListWithPlan(int? take, int? skip);
        /// <summary>
        /// 手术室药盒绑定套餐
        /// </summary>
        /// <returns></returns>
        Task<bool> BindBox(ChannelList list, Plan plan);
        /// <summary>
        /// 手术室药盒绑定套餐
        /// </summary>
        /// <returns></returns>
        Task<bool> BindBox(ChannelList channelList);
        /// <summary>
        /// 手术室药盒解绑套餐
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        Task<bool> UnBindBox(ChannelList list);
        //获取手术室药盒中所有要补药的数据
        Task<PageData<ChannelList>> GetAllBoxAddDrug(int? take, int? skip);
        //手术室药盒补药获取毒麻柜中的药品信息
        Task<List<BoxTakeVo>> getTakeInfoByBox(ChannelList cl);
        //手术室药盒补药完成
        Task<bool> BoxTakeFinish(List<BoxTakeVo> datas, ChannelList boxChannelList);
        //手术室药盒入库
        Task<PageData<ChannelList>> GetBoxWaitInfo(int? take, int? skip);
        // 药盒入库弹窗页面获取要入库的药品明细信息
        Task<List<ChannelStock>> GetBoxAddToBox(ChannelList cl);
        //手术室药盒入库获取待入库明细
        Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl, int? take, int? skip);
        // 手术室药盒待入库明细入库完成
        Task<bool> BoxAddBoxFinish(ChannelList boxChannelList);

        //手术室药盒获取药盒药品及库存信息
        Task<PageData<PlanDetails>> GetBoxDrugInfo(string DrawerNo, int? take, int? skip);
        //药盒移库时获取选中药盒号的药品信息
        Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, string drawerNo,int? take, int? skip);

        /// <summary>
        /// 药盒交换药品获取所有除本药盒外的所有药盒号
        /// </summary>
        /// <param name="machineId"></param>
        /// <returns></returns>
        Task<string[]> GetDrawerNum(ChannelStock channelStock);

        /// <summary>
        /// 药盒移除药品，获取所有除本药盒外的所有包含该药品的药盒号
        /// </summary>
        /// <param name="machineId"></param>
        /// <returns></returns>
        Task<string[]> GetDrawerNumForRemove(ChannelStock channelStock);

        //手术室药盒交换药品完成
        Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> Stocks);
        //手术室药盒移出药品完成
        Task<bool> BoxRemoveFinish(ChannelStock stock, string SelectedDrawerNo, int removeQuantity);

        Task<List<ChannelList>> GetAllBox();
        //根据药盒查询药品信息
        Task<List<ChannelStock>> GetChannelStockByBox(int BoxNum);
        //根据套餐下无库存的药箱
        Task<List<ChannelStock>> GetChannelStockByPlan(string plan);
        //手术室药盒获取绑定数据
        Task<List<ChannelList>> GetAllChannelList();
        //抽屉取药向药盒加药校验药盒中是否存在该药
        Task<CheckInfo<ChannelList>> CheckBoxDrugInfo(BoxModel BoxNum,List<ChannelStock> channelStockList);
        //药箱中的药移入到抽屉
        Task<bool> RemoveDrugToDrawerFinish(string SelectedDrawerNo, ChannelStock channelStock, int quantity);
    }
}
