#ifndef D_MOCK_BT_MESSAGE_FACTORY_H
#define D_MOCK_BT_MESSAGE_FACTORY_H

#include "BtMessageFactory.h"

#include "BtHandshakeMessage.h"
#include "BtRequestMessage.h"
#include "BtCancelMessage.h"
#include "BtPieceMessage.h"
#include "BtHaveMessage.h"
#include "BtChokeMessage.h"
#include "BtUnchokeMessage.h"
#include "BtInterestedMessage.h"
#include "BtNotInterestedMessage.h"
#include "BtBitfieldMessage.h"
#include "BtKeepAliveMessage.h"
#include "BtHaveAllMessage.h"
#include "BtHaveNoneMessage.h"
#include "BtRejectMessage.h"
#include "BtAllowedFastMessage.h"
#include "BtPortMessage.h"
#include "BtExtendedMessage.h"
#include "ExtensionMessage.h"

namespace aria2 {

class ExtensionMessage;

class MockBtMessageFactory : public BtMessageFactory {
public:
  MockBtMessageFactory() {}

  virtual ~MockBtMessageFactory() {}

  virtual std::unique_ptr<BtMessage>
  createBtMessage(const unsigned char* msg, size_t msgLength) CXX11_OVERRIDE
  {
    return nullptr;
  };

  virtual std::unique_ptr<BtHandshakeMessage>
  createHandshakeMessage(const unsigned char* msg,
                         size_t msgLength) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtHandshakeMessage>
  createHandshakeMessage(const unsigned char* infoHash,
                         const unsigned char* peerId) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtRequestMessage>
  createRequestMessage(const std::shared_ptr<Piece>& piece,
                       size_t blockIndex) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtCancelMessage>
  createCancelMessage(size_t index, int32_t begin,
                      int32_t length) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtPieceMessage>
  createPieceMessage(size_t index, int32_t begin, int32_t length) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtHaveMessage>
  createHaveMessage(size_t index) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtChokeMessage> createChokeMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtUnchokeMessage>
  createUnchokeMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtInterestedMessage>
  createInterestedMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtNotInterestedMessage>
  createNotInterestedMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtBitfieldMessage>
  createBitfieldMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtKeepAliveMessage>
  createKeepAliveMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtHaveAllMessage>
  createHaveAllMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtHaveNoneMessage>
  createHaveNoneMessage() CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtRejectMessage>
  createRejectMessage(size_t index, int32_t begin,
                      int32_t length) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtAllowedFastMessage>
  createAllowedFastMessage(size_t index) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtPortMessage>
  createPortMessage(uint16_t port) CXX11_OVERRIDE
  {
    return nullptr;
  }

  virtual std::unique_ptr<BtExtendedMessage> createBtExtendedMessage(
      std::unique_ptr<ExtensionMessage> extmsg) CXX11_OVERRIDE
  {
    return nullptr;
  }
};

} // namespace aria2

#endif // D_MOCK_BT_MESSAGE_FACTORY_H