#ifndef SRC_HDF5_ITERATION_WRITER_HH
#define SRC_HDF5_ITERATION_WRITER_HH


#include "../../time-stepping/adaptivetimestepper.hh"
#include <dune/fufem/hdf5/file.hh>
#include <dune/fufem/hdf5/sequenceio.hh>

class IterationWriter {
public:
  IterationWriter(HDF5::Grouplike& file)
      : group_(file, "iterations"),
        fpiSubGroup_(group_, "fixedPoint"),
        mgSubGroup_(group_, "multiGrid"),
        finalMGIterationWriter_(mgSubGroup_, "final"),
        finalFPIIterationWriter_(fpiSubGroup_, "final"),
        totalMGIterationWriter_(mgSubGroup_, "total"),
        totalFPIIterationWriter_(fpiSubGroup_, "total") {}

  void write(size_t timeStep, const IterationRegister& iterationCount) {
    addEntry(finalMGIterationWriter_, timeStep,
             iterationCount.finalCount.multigridIterations);
    addEntry(finalFPIIterationWriter_, timeStep,
             iterationCount.finalCount.iterations);
    addEntry(totalMGIterationWriter_, timeStep,
             iterationCount.totalCount.multigridIterations);
    addEntry(totalFPIIterationWriter_, timeStep,
             iterationCount.totalCount.iterations);
  }

private:
  HDF5::Group group_;
  HDF5::Group fpiSubGroup_;
  HDF5::Group mgSubGroup_;

  HDF5::SequenceIO<0, size_t> finalMGIterationWriter_;
  HDF5::SequenceIO<0, size_t> finalFPIIterationWriter_;
  HDF5::SequenceIO<0, size_t> totalMGIterationWriter_;
  HDF5::SequenceIO<0, size_t> totalFPIIterationWriter_;
};

#endif