#ifndef D_MOCK_BT_ANNOUNCE_H
#define D_MOCK_BT_ANNOUNCE_H

#include "BtAnnounce.h"

namespace aria2 {

class MockBtAnnounce : public BtAnnounce {
private:
  bool announceReady;
  std::string announceUrl;
  std::string peerId;
public:
  MockBtAnnounce() {}
  virtual ~MockBtAnnounce() {}

  virtual bool isAnnounceReady() CXX11_OVERRIDE {
    return announceReady;
  }

  void setAnnounceReady(bool flag) {
    this->announceReady = flag;
  }

  virtual std::string getAnnounceUrl() CXX11_OVERRIDE {
    return announceUrl;
  }

  virtual std::shared_ptr<UDPTrackerRequest>
  createUDPTrackerRequest(const std::string& remoteAddr, uint16_t remotePort,
                          uint16_t localPort) CXX11_OVERRIDE {
    return nullptr;
  }

  void setAnnounceUrl(const std::string& url) {
    this->announceUrl = url;
  }

  virtual void announceStart() CXX11_OVERRIDE {}

  virtual void announceSuccess() CXX11_OVERRIDE {}

  virtual void announceFailure() CXX11_OVERRIDE {}

  virtual bool isAllAnnounceFailed() CXX11_OVERRIDE {
    return false;
  }

  virtual void resetAnnounce() CXX11_OVERRIDE {}

  virtual void processAnnounceResponse(const unsigned char* trackerResponse,
                                       size_t trackerResponseLength)
    CXX11_OVERRIDE
  {}

  virtual void processUDPTrackerResponse
  (const std::shared_ptr<UDPTrackerRequest>& req) CXX11_OVERRIDE {}

  virtual bool noMoreAnnounce() CXX11_OVERRIDE {
    return false;
  }

  virtual void shuffleAnnounce() CXX11_OVERRIDE {
  }

  virtual void overrideMinInterval(std::chrono::seconds interval) CXX11_OVERRIDE
  {
  }

  virtual void setTcpPort(uint16_t port) CXX11_OVERRIDE {}

  void setPeerId(const std::string& peerId) {
    this->peerId = peerId;
  }
};

} // namespace aria2

#endif // D_MOCK_BT_ANNOUNCE_H
