#ifndef SRC_SAND_WEDGE_DATA_SEGMENTED_FUNCTION_HH
#define SRC_SAND_WEDGE_DATA_SEGMENTED_FUNCTION_HH

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

#include "mygeometry.hh"

class SegmentedFunction
    : public Dune::VirtualFunction<Dune::FieldVector<double, MY_DIM>,
                                   Dune::FieldVector<double, 1>> {
private:
  bool liesBelow(Dune::FieldVector<double, MY_DIM> const &x,
                 Dune::FieldVector<double, MY_DIM> const &y,
                 Dune::FieldVector<double, MY_DIM> const &z) const {
    return x[1] + (z[0] - x[0]) * (y[1] - x[1]) / (y[0] - x[0]) >= z[1];
  };
  bool insideRegion2(Dune::FieldVector<double, MY_DIM> const &z) const {
    return liesBelow(MyGeometry::K, MyGeometry::M, z);
  };

  double const _v1;
  double const _v2;

public:
  SegmentedFunction(double v1, double v2) : _v1(v1), _v2(v2) {}

  void evaluate(Dune::FieldVector<double, MY_DIM> const &x,
                Dune::FieldVector<double, 1> &y) const {
    y = insideRegion2(x) ? _v2 : _v1;
  }
};
#endif