#pragma once
#include <string>
#include "split.hpp"

class Client;

class Message {
private:
    Client& _client;
    const std::string _raw;
    std::string _cmd;
    string_vector _args;
public:
    Message(Client& _client, const std::string& raw);

    const std::string& getRaw() const;
    const std::string& getCmd() const;
    int expectArgs(unsigned int count) const;
    const string_vector& getArgs() const;
    Client& getClient() const;
};

std::ostream& operator<<(std::ostream &os, const Message& msg);
