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

namespace Knots.Hubs;

[Authorize]
public class ChatHub(KnotsDbContext db, AutoMapper.IMapper mapper) : 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 Models.Message
        {
            // adapte aux noms réels de ton modèle (AuthorId, Contenu, Date...)
            AuthorId = int.Parse(Context.UserIdentifier!),
            Contenu  = content,
            Date     = DateTime.UtcNow,
            DiscussionId = int.Parse(conversationId)
        };

        db.Messages.Add(message);
        await db.SaveChangesAsync();

        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);
    }
}