// Copyright (c) 2012-2017 VideoStitch SAS
// Copyright (c) 2018 stitchEm

#ifndef MERGERMASKUPDATER_HPP
#define MERGERMASKUPDATER_HPP

#include "mergerMaskDef.hpp"
#include "deferredUpdater.hpp"

namespace VideoStitch {
namespace Core {

class MergerMaskUpdater : public MergerMaskDefinition, public DeferredUpdater<MergerMaskDefinition> {
 public:
  explicit MergerMaskUpdater(const MergerMaskDefinition& mergerDefinition);

  virtual MergerMaskDefinition* clone() const override;

  virtual Ptv::Value* serialize() const override;

  virtual bool getEnabled() const override;

  virtual int64_t getWidth() const override;

  virtual int64_t getHeight() const override;

  virtual std::vector<size_t> getMasksOrder() const override;

  virtual int getInputScaleFactor() const override;

  virtual void setEnabled(bool b) override;

  virtual void setWidth(int64_t int641) override;

  virtual void setHeight(int64_t int641) override;

  virtual void setMasksOrder(std::vector<size_t> vector) override;

  virtual void setInputScaleFactor(int) override;

  virtual const InputIndexPixelData& getInputIndexPixelData() const override;

  virtual bool validateInputIndexPixelData() const override;

  virtual Status setInputIndexPixelData(const std::map<videoreaderid_t, std::string>& encodedMasks,
                                        const uint64_t width, const uint64_t height, const frameid_t frameId) override;

  virtual std::vector<frameid_t> getFrameIds() const override;

  virtual void removeFrameIds(const std::vector<frameid_t>& frameIds) override;

  virtual std::vector<std::pair<frameid_t, std::map<videoreaderid_t, std::string>>> getInputIndexPixelDataIfValid(
      const frameid_t frameId) const override;

 private:
  std::unique_ptr<MergerMaskDefinition> mergerMaskDefinition;
};

}  // namespace Core
}  // namespace VideoStitch

#endif  // MERGERMASKUPDATER_HPP