using System.Threading.Tasks;
using GxPress.Auth;
using GxPress.Common.Page;
using GxPress.Entity.WaitHandle;
using GxPress.Request.App.WaitHandle;
using GxPress.Result.App.WaitHandle;
using GxPress.Service.Interface.WaitHandle;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace GxPress.Api.WebControllers
{
    /// <summary>
    /// 待办事项
    /// </summary>
    [Route("api/web/wait-handle")]
    [ApiController]
    [Authorize]
    public class WebWaitHandleController : Controller
    {
        private readonly IWaitHandleService _waitHandleService;
        private readonly ILoginContext _loginContext;

        public WebWaitHandleController(IWaitHandleService waitHandleService, ILoginContext loginContext)
        {
            _waitHandleService = waitHandleService;
            _loginContext = loginContext;
        }

        /// <summary>
        /// 添加修改待办事项
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPut("add-update")]
        public async Task<WaitHandle> AddOrUpdateWaitHandleAsync(WaitHandleAddOrUpdateRequest request)
        {
            request.UserId = _loginContext.AccountId;
            return await _waitHandleService.AddOrUpdateWaitHandleAsync(request);
        }
        /// <summary>
        /// 删除待办事项
        /// </summary>
        /// <returns></returns>
        [HttpDelete("delete")]
        public async Task<bool> DeleteWaitHandleAsync(DeleteWaitHandleRequest request)
        {
            return await _waitHandleService.DeleteWaitHandleAsync(request);
        }

        /// <summary>
        ///  待办搜索  Sort :hand  手动 time按时间 label 标签 level 优先级
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost("page")]
        public async Task<PagedList<WaitHandle>> PageWaitHandleAsync(PageWaitHandleRequest request)
        {
            request.UserId = _loginContext.AccountId;
            return await _waitHandleService.PageWaitHandleAsync(request);
        }
        /// <summary>
        /// 添加修改标签
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPut("add-update-label")]
        public async Task<bool> AddOrUpdateWaitHandleLabelAsync(WaitHandleLabelAddOrUpdateRequest request)
        {
            request.UserId = _loginContext.AccountId;
            return await _waitHandleService.AddOrUpdateWaitHandleLabelAsync(request);
        }
        /// <summary>
        /// 删除标签
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpDelete("delete-label")]
        public async Task<bool> DeleteWaitHandleLabelAsync(DeleteWaitHandleRequest request)
        {
            return await _waitHandleService.DeleteWaitHandleLabelAsync(request);
        }


        /// <summary>
        /// 标签
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost("page-label")]
        public async Task<PagedList<WaitHandleLabel>> PageWaitHandleLabelAsync(
            PageWaitHandleRequest request)
        {
            request.UserId = _loginContext.AccountId;
            return await _waitHandleService.PageWaitHandleLabelAsync(request);
        }

        /// <summary>
        /// 待办搜索  1  手动 2 按时间 3 标签 4 优先级
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost("list")]
        public async Task<WaitHandleListResult> WaitHandleListAsync(ListWaitHandleRequest request)
        {
            request.UserId = _loginContext.AccountId;
            return await _waitHandleService.WaitHandleListAsync(request);
        }

        /// <summary>
        /// 设置待办事项
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpPut("set/{id}")]
        public async Task<bool> IsFinishAsync(int id)
        {
            return await _waitHandleService.IsFinishAsync(id);
        }

        /// <summary>
        /// 获取详情
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<Entity.WaitHandle.WaitHandle> GetWait(int id)
        {
            return await _waitHandleService.GetWaitAsync(id);
        }
    }
}