using BBWYB.Server.Business;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace BBWYB.Server.API.Controllers
{
    /// <summary>
    /// 限时任务
    /// </summary>
    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    public class TimeLimitTaskController : BaseApiController
    {
        private TimeLimitTaskBusiness timeLimitTaskBusiness;
        public TimeLimitTaskController(IHttpContextAccessor httpContextAccessor, TimeLimitTaskBusiness timeLimitTaskBusiness) : base(httpContextAccessor)
        {
            this.timeLimitTaskBusiness = timeLimitTaskBusiness;
        }

        /// <summary>
        /// 检查任务过期(自动任务,前端无需对接)
        /// </summary>
        [HttpPost]
        [AllowAnonymous]
        public void CheckTask()
        {
            timeLimitTaskBusiness.CheckTask();
        }

        /// <summary>
        ///  修复订单缺失的待核算任务
        /// </summary>
        [HttpPost]
        [AllowAnonymous]
        public void RepairOrderComputationTask()
        {
            timeLimitTaskBusiness.RepairOrderComputationTask();
        }

        /// <summary>
        /// 查询限时任务列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public TimeLimitTaskListResponse QueryTimeLimitTask([FromBody] QueryTimeLimitTaskRequest request)
        {
            return timeLimitTaskBusiness.QueryTimeLimitTask(request);
        }

        /// <summary>
        /// 限时任务统计
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public IList<TimeLimitTaskStatisticsResponse> TimeOutStatistics([FromBody] QueryTimeOutRequest request)
        {
            return timeLimitTaskBusiness.TimeOutStatistics(request);
        }

        /// <summary>
        /// 修改备注
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void EditTimeLimitTaskRemark([FromBody] EditTimeLimitTaskRemarkRequest request)
        {
            timeLimitTaskBusiness.EditTimeLimitTaskRemark(request);
        }

        /// <summary>
        /// 测试计算过期时间
        /// </summary>
        /// <param name="timeLimitTaskType"></param>
        /// <param name="startTime">起点时间</param>
        [HttpGet]
        [AllowAnonymous]
        public DateTime TestExpireTime([FromQuery] Enums.TimeLimitTaskType timeLimitTaskType, [FromQuery] DateTime startTime)
        {
            return timeLimitTaskBusiness.TestExpireTime(timeLimitTaskType, startTime);
        }

        /// <summary>
        /// 测试计算剩余时间
        /// </summary>
        /// <param name="expireTime"></param>
        /// <returns></returns>
        [HttpGet]
        [AllowAnonymous]
        public (long, TimeSpan) TextLessTime([FromQuery] DateTime expireTime)
        { 
            return timeLimitTaskBusiness.TextLessTime(expireTime);
        }
    }
}