using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.SignalR;
using System.ComponentModel.DataAnnotations;

namespace OASystem.API.OAMethodLib.Hubs
{
    /// <summary>
    /// 站内通信 Hub
    /// </summary>
    public class MessageHub : Hub
    {
        private readonly ILogger<MessageHub> _logger;

        public static List<HubUser> _userList = new List<HubUser> { };
        public MessageHub(ILogger<MessageHub> logger)
        {
            _logger = logger;
        }


        //发送消息--发送给所有连接的客户端
        public Task SendMessage(string msg)
        {
            return Clients.All.SendAsync("ReceiveMessage", msg);
        }
        //发送消息--发送给指定用户
        public Task SendPrivateMessage(string connectionId, string message)
        {
            return Clients.Client(connectionId).SendAsync("ReceiveMessage", message);
        }



        /// <summary>
        /// 登录功能,将用户ID和ConntectionId关联起来
        /// </summary>
        /// <param name="userId"></param>
        public void Login(int userId,string userName)
        {
            try
            {
                HubUser hu = _userList.Find(a => a.UserId == userId);
                if (hu != null)
                {
                    _userList.Remove(hu);
                }
                string connectionId = Context.ConnectionId;
                _userList.Add(new HubUser
                {
                    UserId = userId,
                    UserName = userName,
                    ConnectionId = connectionId
                });
                Console.WriteLine($"{userId}登录成功,ConnectionId={connectionId}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{userId}登录失败");
            }
            
        }

        /// <summary>
        /// 退出功能,当客户端退出时调用
        /// </summary>
        /// <param name="userId"></param>
        public void Logout(int userId)
        {
            HubUser hu = _userList.Find(a => a.UserId == userId);
            if (hu != null)
            {
                _userList.Remove(hu);
            }
            Console.WriteLine($"{userId}退出成功,ConnectionId={hu.ConnectionId}");
        }

        public class HubUser
        {
            /// <summary>
            /// 连接ID
            /// </summary>
            [Key]
            public string ConnectionId { get; set; } = string.Empty;
            /// <summary>
            /// 用户id
            /// </summary>
            public int UserId { get; set; }
            /// <summary>
            /// 姓名
            /// </summary>
            public string UserName { get; set; }
        }
    }
}