using Microsoft.Extensions.Logging;
using SharpChat.Channels;
using SharpChat.Sessions;
using SharpChat.Users;

namespace SharpChat;

public class ClientCommandContext {
    public string Name { get; }
    public string[] Args { get; }
    public Context Chat { get; }
    public User User { get; }
    public Session Session { get; }
    public SockChatConnection Connection { get; }
    public Channel Channel { get; }
    public ILogger Logger => Session.Logger;

    public ClientCommandContext(
        string text,
        Context chat,
        User user,
        Session session,
        SockChatConnection connection,
        Channel channel
    ) {
        ArgumentNullException.ThrowIfNull(text);

        Chat = chat ?? throw new ArgumentNullException(nameof(chat));
        User = user ?? throw new ArgumentNullException(nameof(user));
        Connection = connection ?? throw new ArgumentNullException(nameof(connection));
        Channel = channel ?? throw new ArgumentNullException(nameof(channel));
        Session = session ?? throw new ArgumentNullException(nameof(session));

        string[] parts = text[1..].Split(' ');
        Name = parts.First().Replace(".", string.Empty);
        Args = [.. parts.Skip(1)];
    }

    public bool NameEquals(string name) {
        return Name.Equals(name, StringComparison.Ordinal);
    }
}