#ifndef SRC_MULTI_BODY_PROBLEM_DATA_PATCHFUNCTION_HH
#define SRC_MULTI_BODY_PROBLEM_DATA_PATCHFUNCTION_HH

#include <dune/common/function.hh>
#include <dune/common/fvector.hh>
#include <dune/common/parametertree.hh>

#include <dune/fufem/geometry/polyhedrondistance.hh>

class PatchFunction
    : public Dune::VirtualFunction<Dune::FieldVector<double, MY_DIM>,
                                   Dune::FieldVector<double, 1>> {
private:
  using Polyhedron = ConvexPolyhedron<Dune::FieldVector<double, MY_DIM>>;

  double const v1_;
  double const v2_;
  Polyhedron const &segment_;

  double const lengthScale_;

public:
  PatchFunction(double v1, double v2, Polyhedron const &segment, double lengthScale = 1.0)
      : v1_(v1), v2_(v2), segment_(segment), lengthScale_(lengthScale) {}

  void evaluate(Dune::FieldVector<double, MY_DIM> const &x,
                Dune::FieldVector<double, 1> &y) const {
    y = distance(x, segment_, 1e-6 * lengthScale_) <= 1e-5 ? v2_
                                                                      : v1_;
  }
};

#endif