using Microsoft.AspNetCore.SignalR;
using OASystem.API.OAMethodLib;
using OASystem.API.OAMethodLib.Hub.HubClients;
using OASystem.API.OAMethodLib.Hub.Hubs;
using OASystem.API.OAMethodLib.SignalR.Hubs;

namespace OASystem.API.Controllers
{
    /// <summary>
    /// 消息客户端
    /// </summary>
    [Route("api/[controller]/[action]")]
    public class ClientHubController : ControllerBase
    {
        private readonly ILogger<ClientHubController> _logger;
        private readonly IHubContext<ChatHub, IChatClient> _hubContext;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="logger"></param>
        /// <param name="hubContext"></param>
        public ClientHubController(ILogger<ClientHubController> logger, IHubContext<ChatHub, IChatClient> hubContext)
        {
            _logger = logger;
            _hubContext = hubContext;
        }

        /// <summary>
        /// 获取在线用户
        /// </summary>
        /// <returns></returns>
        [HttpGet("GetOnlineUsers", Name = "GetOnlineUsers")]
        public List<UserModel> GetOnlineUsers()
        {
            return UserStore.OnlineUser;
        }


        /// <summary>
        /// 发送消息给客户端
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        [HttpPost("SendAllUserMessage", Name = "SendAllUserMessage")]
        public async Task<IActionResult> SendAllUserMessage(string msg)
        {
            await _hubContext.Clients.All.ReceiveMessage(msg);
            return Ok("Send Successful!");
        }

        /// <summary>
        /// 发送指定的消息给指定的客户端
        /// </summary>
        /// <param name="userIds"></param>
        /// <param name="title"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        [HttpPost("SendCustomUserMessage", Name = "SendCustomUserMessage")]
        public async Task<IActionResult> SendCustomUserMessage(List<int> userIds, string title, string content)
        {
            string connId = string.Empty;

            //UserModel user = UserStore.OnlineUser.Where(it => it.UserId == userId).FirstOrDefault();
            //if (user != null)
            //{
            //    connId = user.ConnectionId;
            //}
            //else
            //{
            //    return Ok("Send Failed! User Not Online!");
            //}

            //await _hubContext.Clients.Client(connId).ReceiveMessage(date);

            await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.Announcement, title, content, userIds);

            return Ok("Send Successful!");
        }

        /// <summary>
        /// 消息 发布And 通知
        /// </summary>
        /// <param name="msgTypeEnum"></param>
        /// <param name="title"></param>
        /// <param name="content"></param>
        /// <param name="userIds"></param>
        /// <returns></returns>
        [HttpPost("MessageIssuserAndNotification", Name = "MessageIssuserAndNotification")]
        public async Task<IActionResult> MessageIssuserAndNotification(MessageTypeEnum msgTypeEnum, string title, string content, List<int> userIds)
        {
            var status = await GeneralMethod.MessageIssueAndNotification(msgTypeEnum, title, content, userIds);
            if (status)
            {
                return Ok("Operation Successful!");
            }
            else
            {
                return Ok("Operation Fail!");
            }

        }

    }
}