/* ***********************************************************************
//
//   Copyright (C) 2025 -- The 4D-STAR Collaboration
//   File Author: Emily Boudreaux
//   Last Modified: February 16, 2025
//
//   4DSSE is free software; you can use it and/or modify
//   it under the terms and restrictions the GNU General Library Public
//   License version 3 (GPLv3) as published by the Free Software Foundation.
//
//   4DSSE is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//   See the GNU Library General Public License for more details.
//
//   You should have received a copy of the GNU Library General Public License
//   along with this software; if not, write to the Free Software
//   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// *********************************************************************** */
#ifndef MESHIO_H
#define MESHIO_H

#include "mfem.hpp"
#include <string>

/**
 * @brief Class for handling mesh input/output operations.
 */
class MeshIO
{
private:
    bool loaded_; ///< Flag to indicate if the mesh is loaded
    std::string mesh_file_; ///< Filename of the mesh file
    mfem::Mesh mesh_; ///< The mesh object

public:
    /**
     * @brief Constructor that initializes the MeshIO object with a mesh file.
     * @param mesh_file The name of the mesh file.
     */
    MeshIO(const std::string &mesh_file, double scale_factor = 1.0);

    /**
     * @brief Destructor for the MeshIO class.
     */
    ~MeshIO();

    /**
     * @brief Rescale the mesh by a linear factor.
     * @param scale_factor The factor by which to scale the mesh.
     */
    void LinearRescale(double scale_factor);

    /**
     * @brief Get the mesh object.
     * @return Reference to the mesh object.
     */
    mfem::Mesh& GetMesh();

    /**
     * @brief Check if the mesh is loaded.
     * @return True if the mesh is loaded, false otherwise.
     */
    bool IsLoaded() const;
};

#endif // MESHIO_H