#ifndef MISSION_TMTC_DIRECTTMSINKIF_H_
#define MISSION_TMTC_DIRECTTMSINKIF_H_

#include <cstddef>

#include "eive/resultClassIds.h"
#include "fsfw/retval.h"

class DirectTmSinkIF {
 public:
  virtual ~DirectTmSinkIF() = default;

  static constexpr uint8_t CLASS_ID = CLASS_ID::TM_SINK;

  static constexpr ReturnValue_t IS_BUSY = returnvalue::makeCode(CLASS_ID, 0);

  /**
   * @brief   Implements the functionality to write to a TM sink directly
   *
   * @param data  Pointer to buffer holding the data to write
   * @param size  Number of bytes to write
   * @return returnvalue::OK on success, returnvalue::FAILED on failure, IS_BUSY
   *    if the TM sink is busy.
   */
  virtual ReturnValue_t write(const uint8_t* data, size_t size) = 0;

  virtual bool isBusy() const = 0;
};

#endif /* MISSION_TMTC_DIRECTTMSINKIF_H_ */