#pragma once

#include <functional>
#include <string>

class OtaUpdater {
  bool updateAvailable = false;
  std::string latestVersion;
  std::string otaUrl;
  size_t otaSize = 0;

 public:
  enum OtaUpdaterError {
    OK = 0,
    NO_UPDATE,
    HTTP_ERROR,
    JSON_PARSE_ERROR,
    UPDATE_OLDER_ERROR,
    INTERNAL_UPDATE_ERROR,
    OOM_ERROR,
  };
  size_t processedSize = 0;
  size_t totalSize = 0;

  OtaUpdater() = default;
  bool isUpdateNewer();
  const std::string& getLatestVersion();
  OtaUpdaterError checkForUpdate();
  OtaUpdaterError installUpdate(const std::function<void(size_t, size_t)>& onProgress);
};
