using WIDESEA_DTO;
using static WIDESEA_DTO.RequestTaskDto;
namespace WIDESEA_WMSServer.Controllers;
/// 
/// 任务操作接口
/// 
[Route("api/[controller]")]
[ApiController]
public class TaskController : ApiBaseController
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    private readonly IDt_TaskService _taskService;
    private readonly ILocationInfoService _locationService;
    public TaskController(IDt_TaskService taskService,
        IHttpContextAccessor httpContextAccessor,
        ILocationInfoService locationService) : base(taskService)
    {
        _httpContextAccessor = httpContextAccessor;
        _taskService = taskService;
        _locationService = locationService;
    }
    /// 
    /// 任务完成
    /// 
    /// 任务号
    /// 成功或失败
    [HttpGet, Route("CompleteTaskAsync"), AllowAnonymous]
    public async Task CompleteTaskAsync(int taskNum)
    {
        return await _taskService.CompleteAsync(taskNum);
    }
    /// 
    /// 任务完成
    /// 
    /// 任务号
    /// 成功或失败
    //[HttpGet, Route("CompleteTaskByStation"), AllowAnonymous]
    //public async Task CompleteTaskByStation(int taskNum)
    //{
    //    return await _taskService.CompleteTaskByStation(taskNum);
    //}
    /// 
    /// 检查是否需要进行移库
    /// 
    /// 任务号
    /// 任务
    [HttpGet, Route("TransferCheckAsync"), AllowAnonymous]
    public async Task TransferCheckAsync(int taskNum)
    {
        return new WebResponseContent().OK(data: await _locationService.TransferCheckAsync(taskNum));
    }
    /// 
    /// 请求任务巷道
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("RequestTaskAsync")]
    public async Task RequestTaskAsync([FromBody] RequestTaskDto input)
    {
        return await Service.RequestTaskAsync(input);
    }
    /// 
    /// 请求任务巷道
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("RequestInTask")]
    public async Task RequestInTask([FromBody] RequestTaskDto input)
    {
        return await Service.RequestInTask(input);
    }
    /// 
    /// 请求任务货位
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("RequestLocationTaskAsync")]
    public async Task UpdateExistingTask([FromBody] RequestTaskDto input)
    {
        return await Service.UpdateExistingTask(input);
    }
    /// 
    /// 空托盘入库请求
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("RequestTrayInTaskAsync")]
    public async Task RequestTrayInTaskAsync([FromBody] RequestTaskDto input)
    {
        return await Service.RequestTrayInTaskAsync(input);
    }
    /// 
    /// 空托盘&满盘出库请求
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("RequestTrayOutTaskAsync")]
    public async Task RequestTrayOutTaskAsync([FromBody] RequestOutTaskDto request)
    {
        return await Service.RequestTrayOutTaskAsync(request.Position, request.Tag, request.AreaCdoe, request.AreaCdoes, request.ProductionLine);
    }
    /// 
    /// 任务状态修改
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("UpdateTaskStatus")]
    public async Task UpdateTaskStatus([FromBody] UpdateStatusDto input)
    {
        return await Service.UpdateTaskStatus(input.TaskNum, input.TaskState);
    }
    /// 
    /// 获取高温可出库库存
    /// 
    /// 请求数据
    /// 
    [HttpGet, AllowAnonymous, Route("StockCheckingAsync")]
    public WebResponseContent StockCheckingAsync()
    {
        return Service.StockCheckingAsync();
    }
    /// 
    /// 创建指定任务
    /// 
    /// 货位号
    /// 托盘号
    /// 
    [HttpGet, AllowAnonymous, Route("CreateAndSendOutboundTask")]
    public async Task CreateAndSendOutboundTask(string locationCode, string palletCode)
    {
        return await Service.CreateAndSendOutboundTask(locationCode, palletCode);
    }
    /// 
    /// 静置NG入库
    /// 
    /// 货位号
    /// 托盘号
    /// 
    [HttpPost, AllowAnonymous, Route("RequestInBoundTaskNG")]
    public async Task RequestInBoundTaskNG([FromBody] RequestTaskDto input)
    {
        return await Service.CreateAndSendInboundTask(input.PalletCode, input.Position);
    }
    /// 
    /// 常温补空托盘至分容
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("GetFROutTrayToCW")]
    public async Task GetFROutTrayToCW([FromBody] RequestTaskDto input)
    {
        return await Service.GetFROutTrayToCW(input);
    }
    /// 
    /// DTS火警出库
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("EmergencyTask")]
    public WebResponseContent EmergencyTask([FromBody] object input)
    {
        return Service.EmergencyTask(input);
    }
    /// 
    /// CW3 出库至包装
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("RequestOutTaskToBZAsync")]
    public async Task RequestOutTaskToBZAsync([FromBody] RequestTaskDto input)
    {
        return await Service.RequestOutTaskToBZAsync(input);
    }
    /// 
    /// 分容空框入库改为直接出库
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("SetEmptyOutbyInToOutAsync")]
    public async Task SetEmptyOutbyInToOutAsync([FromBody] RequestTaskDto input)
    {
        return await Service.SetEmptyOutbyInToOutAsync(input);
    }
    /// 
    /// 分容空框出库改为直接出库
    /// 
    /// 请求数据
    /// 
    [HttpPost, AllowAnonymous, Route("SetEmptyOutbyInToOutOneAsync")]
    public async Task SetEmptyOutbyInToOutOneAsync([FromBody] RequestTaskDto input)
    {
        return await Service.SetEmptyOutbyInToOutOneAsync(input);
    }
}