#pragma once

#include "section_header.hpp"

namespace attn
{
namespace pel
{
/**
 * @class Section
 *
 * The base class for a PEL section.  It contains the SectionHeader
 * as all sections start with it.
 *
 */
class Section
{
  public:
    Section()                          = default;
    virtual ~Section()                 = default;
    Section(const Section&)            = default;
    Section& operator=(const Section&) = default;
    Section(Section&&)                 = default;
    Section& operator=(Section&&)      = default;

    /**
     * @brief Returns a reference to the SectionHeader
     */
    const SectionHeader& header() const
    {
        return _header;
    }

    /**
     * @brief Flatten the section into the stream
     *
     * @param[in] stream - The stream to write to
     */
    virtual void flatten(Stream& stream) const = 0;

  protected:
    /**
     * @brief Returns the flattened size of the section header
     */
    static constexpr size_t flattenedSize()
    {
        return SectionHeader::flattenedSize();
    }

    /**
     * @brief The section header structure.
     *
     * Filled in by derived classes.
     */
    SectionHeader _header;
};

} // namespace pel
} // namespace attn
