#ifndef SRC_SAND_WEDGE_DATA_PATCHFUNCTION_HH
#define SRC_SAND_WEDGE_DATA_PATCHFUNCTION_HH

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

#include "../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_;

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

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

#endif