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

#pragma once

#include <gpu/buffer.hpp>
#include <gpu/stream.hpp>
#include "libvideostitch/status.hpp"
#include "maskMerger.hpp"

namespace VideoStitch {
namespace Core {

class VoronoiMaskMerger : public MaskMerger {
 public:
  VoronoiMaskMerger() : feather(0) {}
  virtual ~VoronoiMaskMerger() override {}

  Status setup(const PanoDefinition&, GPU::Buffer<const uint32_t> inputsMask, const ImageMapping& fromIm,
               const ImageMerger* const to, GPU::Stream) override;

  virtual Status updateAsync() override;

  virtual Status setParameters(const std::vector<double>& params) override;

 private:
  int feather;
  // with one parameter from 0 to 100, be able to provide different settings from sharp to smooth
  // - blending should not change when pano output size changes
  // - provide way to limit overlap
  static std::pair<float, float> transitionParameters(int feather);
};
}  // namespace Core
}  // namespace VideoStitch
