#pragma once

#include <LibIPC/IServerConnection.h>
#include <ProtocolServer/ProtocolClientEndpoint.h>
#include <ProtocolServer/ProtocolServerEndpoint.h>

namespace LibProtocol {

class Download;

class Client : public IServerConnection<ProtocolClientEndpoint, ProtocolServerEndpoint>
    , public ProtocolClientEndpoint {
    C_OBJECT(Client)
public:
    Client();

    virtual void handshake() override;

    bool is_supported_protocol(const String&);
    RefPtr<Download> start_download(const String& url);

    bool stop_download(Badge<Download>, Download&);

private:
    virtual void handle(const ProtocolClient::DownloadProgress&) override;
    virtual void handle(const ProtocolClient::DownloadFinished&) override;

    HashMap<i32, RefPtr<Download>> m_downloads;
};

}