using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;

namespace Knots.Hubs;

[Authorize]
public class ChatHub : Hub
{
    // Rejoindre une conversation (room)
    public async Task JoinConversation(string conversationId)
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, conversationId);
    }

    // Quitter une conversation
    public async Task LeaveConversation(string conversationId)
    {
        await Groups.RemoveFromGroupAsync(Context.ConnectionId, conversationId);
    }

    // Envoyer un message à une conversation
    public async Task SendMessage(string conversationId, string content)
    {
        var message = new
        {
            SenderId  = Context.UserIdentifier,
            Content   = content,
            SentAt    = DateTime.UtcNow
        };

        // Diffuse à tous les membres de la conversation
        await Clients.Group(conversationId).SendAsync("ReceiveMessage", message);
    }

    // Notifier que l'utilisateur est en train d'écrire
    public async Task Typing(string conversationId)
    {
        await Clients.OthersInGroup(conversationId)
            .SendAsync("UserTyping", Context.UserIdentifier);
    }
}