using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_DTO.Stock;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.TaskInfo
{
    /// 
    /// 任务
    /// 
    [Route("api/Task")]
    [ApiController]
    public class TaskController : ApiBaseController
    {
        public TaskController(ITaskService service) : base(service)
        {
        }
        ///// 
        ///// 将WMS任务推送至WCS
        ///// 
        ///// 
        //[HttpPost, HttpGet, Route("PushTasksToWCS"), AllowAnonymous]
        //public WebResponseContent PushTasksToWCS()
        //{
        //    return Service.PushTasksToWCS();
        //}
        /// 
        /// 申请入库任务
        /// 
        /// 
        /// 
        /// 
        [HttpPost, HttpGet, Route("RequestInboundTask"), AllowAnonymous]
        public WebResponseContent RequestInboundTask([FromBody] SaveModel saveModel)
        {
            return Service.RequestInboundTask(saveModel);
        }
        /// 
        /// 空箱入库
        /// 
        /// 托盘号
        /// 地址
        /// 
        [HttpPost, HttpGet, Route("InEmpty"), AllowAnonymous]
        public WebResponseContent InEmpty(string barcode, string address, int WarehouseId)
        {
            return Service.InEmpty(barcode, address, WarehouseId);
        }
        /// 
        /// 空箱出库
        /// 
        /// 数量
        /// 地址
        /// 
        [HttpPost, HttpGet, Route("OutEmpty"), AllowAnonymous]
        public WebResponseContent OutEmpty(int qty, string address, int WarehouseId)
        {
            return Service.OutEmpty(qty, address, WarehouseId);
        }
        [HttpPost, HttpGet, Route("DeviceRequestInboundTask"), AllowAnonymous]
        public WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode)
        {
            return Service.DeviceRequestInboundTask(stationCode, roadwayNo, palletCode);
        }
        /// 
        /// 入库任务申请分配货位
        /// 
        /// 任务号
        /// 巷道号
        /// 
        [HttpPost, HttpGet, Route("AssignInboundTaskLocation"), AllowAnonymous]
        public WebResponseContent AssignInboundTaskLocation(int taskNum, string roadwayNo)
        {
            return Service.AssignInboundTaskLocation(taskNum, roadwayNo);
        }
        /// 
        /// 入库任务完成
        /// 
        /// 
        /// 
        [HttpPost, HttpGet, Route("InboundTaskCompleted"), AllowAnonymous]
        public WebResponseContent InboundTaskCompleted(int taskNum)
        {
            return Service.InboundTaskCompleted(taskNum);
        }
        /// 
        /// 生成出库任务
        /// 
        /// 
        /// 
        /// 
        [HttpPost, HttpGet, Route("GenerateOutboundTask"), AllowAnonymous]
        public WebResponseContent GenerateOutboundTask(int orderDetailId, [FromBody] List stockSelectViews)
        {
            return Service.GenerateOutboundTask(orderDetailId, stockSelectViews);
        }
        /// 
        /// 生成出库任务
        /// 
        /// 
        /// 
        [HttpPost, HttpGet, Route("GenerateOutboundTasks"), AllowAnonymous]
        public WebResponseContent GenerateOutboundTask([FromBody] int[] keys)
        {
            return Service.GenerateOutboundTask(keys);
        }
        /// 
        /// 出库任务完成
        /// 
        /// 任务号
        /// 
        [HttpPost, HttpGet, Route("OutboundTaskCompleted"), AllowAnonymous]
        public WebResponseContent OutboundTaskCompleted(int taskNum)
        {
            return Service.OutboundTaskCompleted(taskNum);
        }
        /// 
        /// 判断是否需要移库
        /// 
        /// 任务号
        /// 
        /// 
        [HttpPost, HttpGet, Route("IsRelocation"), AllowAnonymous]
        public WebResponseContent IsRelocation(int taskNum, string locationCode)
        {
            return Service.IsRelocation(taskNum, locationCode);
        }
        /// 
        /// 任务完成
        /// 
        /// 任务号
        /// 
        [HttpPost, HttpGet, Route("TaskCompleted"), AllowAnonymous]
        public WebResponseContent TaskCompleted(int taskNum)
        {
            return Service.TaskCompleted(taskNum);
        }
        /// 
        /// 单个任务推送至WCS
        /// 
        /// 任务号
        /// 
        /// 
        [HttpPost, HttpGet, Route("PushTasksToWCSSingle"), AllowAnonymous]
        public WebResponseContent PushTasksToWCSSingle(int taskNum, string agvDescription = "")
        {
            return Service.PushTasksToWCSSingle(taskNum, agvDescription);
        }
        /// 
        /// 选择库存生成出库任务
        /// 
        /// 
        /// 
        [HttpPost, Route("Outbound"), AllowAnonymous]
        public WebResponseContent Outbound(int id)
        {
            return Service.Outbound(id);
        }
    }
}