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
{
    /// 
    /// 消息客户端
    /// 
    [Route("api/[controller]/[action]")]
    public class ClientHubController : ControllerBase
    {
        private readonly ILogger _logger;
        private readonly IHubContext _hubContext;
        /// 
        /// 
        /// 
        /// 
        /// 
        public ClientHubController(ILogger logger, IHubContext hubContext)
        {
            _logger = logger;
            _hubContext = hubContext;
        }
        /// 
        /// 获取在线用户
        /// 
        /// 
        [HttpGet("GetOnlineUsers", Name = "GetOnlineUsers")]
        public List GetOnlineUsers()
        {
            return UserStore.OnlineUser;
        }
        /// 
        /// 发送消息给客户端
        /// 
        /// 
        /// 
        [HttpPost("SendAllUserMessage", Name = "SendAllUserMessage")]
        public async Task SendAllUserMessage(string msg)
        {
            await _hubContext.Clients.All.ReceiveMessage(msg);
            return Ok("Send Successful!");
        }
        /// 
        /// 发送指定的消息给指定的客户端
        /// 
        /// 
        /// 
        /// 
        /// 
        [HttpPost("SendCustomUserMessage", Name = "SendCustomUserMessage")]
        public async Task SendCustomUserMessage(List 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!");
        }
        /// 
        /// 消息 发布And 通知
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        [HttpPost("MessageIssuserAndNotification", Name = "MessageIssuserAndNotification")]
        public async Task MessageIssuserAndNotification(MessageTypeEnum msgTypeEnum, string title, string content, List userIds)
        {
            var status = await GeneralMethod.MessageIssueAndNotification(msgTypeEnum, title, content, userIds);
            if (status)
            {
                return Ok("Operation Successful!");
            }
            else
            {
                return Ok("Operation Fail!");
            }
        }
    }
}