#ifndef WALL_BOUNDARY_CONDITION_DESCRIPTOR_HPP
#define WALL_BOUNDARY_CONDITION_DESCRIPTOR_HPP

#include <language/utils/FunctionSymbolId.hpp>
#include <mesh/IBoundaryDescriptor.hpp>
#include <scheme/BoundaryConditionDescriptorBase.hpp>

#include <memory>

class WallBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase
{
 private:
  std::ostream&
  _write(std::ostream& os) const final
  {
    os << "wall(" << *m_boundary_descriptor << ")";
    return os;
  }

 public:
  Type
  type() const final
  {
    return Type::wall;
  }

  WallBoundaryConditionDescriptor(const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor)

    : BoundaryConditionDescriptorBase{boundary_descriptor}
  {
    ;
  }

  WallBoundaryConditionDescriptor(const WallBoundaryConditionDescriptor&) = delete;
  WallBoundaryConditionDescriptor(WallBoundaryConditionDescriptor&&)      = delete;

  ~WallBoundaryConditionDescriptor() = default;
};

#endif   // WALL_BOUNDARY_CONDITION_DESCRIPTOR_HPP