#ifndef IHIDDEVICE_HPP
#define IHIDDEVICE_HPP

#include "boo/inputdev/DeviceToken.hpp"
#include "boo/inputdev/DeviceBase.hpp"
#include <memory>

#if _WIN32
#include <hidsdi.h>
#endif

namespace boo
{

class IHIDDevice : public std::enable_shared_from_this<IHIDDevice>
{
    friend class DeviceBase;
    friend struct DeviceSignature;
    virtual void _deviceDisconnected()=0;
    virtual bool _sendUSBInterruptTransfer(const uint8_t* data, size_t length)=0;
    virtual size_t _receiveUSBInterruptTransfer(uint8_t* data, size_t length)=0;
#if _WIN32
    virtual const PHIDP_PREPARSED_DATA _getReportDescriptor()=0;
#else
    virtual std::vector<uint8_t> _getReportDescriptor()=0;
#endif
    virtual bool _sendHIDReport(const uint8_t* data, size_t length, HIDReportType tp, uint32_t message)=0;
    virtual size_t _receiveHIDReport(uint8_t* data, size_t length, HIDReportType tp, uint32_t message)=0;
    virtual void _startThread()=0;
public:
    virtual ~IHIDDevice() = default;
};

}

#endif // IHIDDEVICE_HPP