#ifndef MISSION_UTILITY_PROGRESSPRINTER_H_
#define MISSION_UTILITY_PROGRESSPRINTER_H_

#include <string>

/**
 * @brief   Class which can be used to print the progress of processes in percent.
 *
 * @author  J. Meier
 */
class ProgressPrinter {
 public:
  static constexpr float HALF_PERCENT = 0.5;
  static constexpr float ONE_PERCENT = 1;
  static constexpr float FIVE_PERCENT = 5;

  /**
   * @brief Constructor
   *
   * @param name                   Name of the process to monitor
   * @param numSteps               Number of steps to execute
   * @param percentageResolution   Distance between printed percentage steps. E.g. 5 means that
   *                               a printout will be generated after 0%, 5%, 10% etc.
   */
  ProgressPrinter(std::string name, uint32_t numSteps, float percentageResolution = FIVE_PERCENT);
  virtual ~ProgressPrinter();

  /**
   * @brief Will print the progress
   *
   * @param currentStep    Current step from which to derive progress
   */
  void print(uint32_t step);

 private:
  std::string name = "";
  uint32_t numSteps = 0;
  float nextProgressPrint = 0;
  float percentageResolution = 0;
};

#endif /* MISSION_UTILITY_PROGRESSPRINTER_H_ */