#ifndef DUNE_TECTONIC_STATE_HH
#define DUNE_TECTONIC_STATE_HH

#include <dune/common/bitsetvector.hh>

#include "enums.hh"
#include "state/stateupdater.hh"
#include "state/ruinastateupdater.hh"
#include "state/dieterichstateupdater.hh"

template <class ScalarVector, class Vector>
std::shared_ptr<StateUpdater<ScalarVector, Vector>> initStateUpdater(
    Config::stateModel model, ScalarVector const &alpha_initial,
    Dune::BitSetVector<1> const &frictionalNodes, double L) {
  switch (model) {
    case Config::Dieterich:
      return std::make_shared<DieterichStateUpdater<ScalarVector, Vector>>(
          alpha_initial, frictionalNodes, L);
    case Config::Ruina:
      return std::make_shared<RuinaStateUpdater<ScalarVector, Vector>>(
          alpha_initial, frictionalNodes, L);
    default:
      assert(false);
  }
}
#endif