#pragma once
#include "Parser.h"
#include "ConnectRequest.h"
#include "ConnectResponse.h"
#include <panda/string.h>
#include <panda/protocol/http/ResponseParser.h>

namespace panda { namespace protocol { namespace websocket {

using panda::string;

struct ClientParser : Parser {

    ClientParser (const Parser::Config& cfg = {}) : Parser(false, cfg), _connect_response_parser() {}

    string connect_request (const ConnectRequestSP& req);

    ConnectResponseSP connect (const string& buf);

    virtual void reset ();

    virtual ~ClientParser () {}

private:
    static const int CONNECTION_REQUESTED       = LAST_FLAG + 1;
    static const int CONNECTION_RESPONSE_PARSED = CONNECTION_REQUESTED + 1;

    ConnectRequestSP     _connect_request;
    ConnectResponseSP    _connect_response;
    http::ResponseParser _connect_response_parser;
};

}}}