#pragma once
#include <optional>
#include "common/types/uuid.h"
#include "storage/page_range.h"
namespace lbug {
namespace storage {
class PageManager;
struct DatabaseHeader {
PageRange catalogPageRange;
PageRange metadataPageRange;
common::page_idx_t dataFileNumPages{0};
common::uuid databaseID{0};
void updateCatalogPageRange(PageManager& pageManager, PageRange newPageRange);
void freeMetadataPageRange(PageManager& pageManager) const;
void serialize(common::Serializer& ser) const;
static DatabaseHeader deserialize(common::Deserializer& deSer);
static DatabaseHeader createInitialHeader(common::RandomEngine* randomEngine);
static std::optional<DatabaseHeader> readDatabaseHeader(common::FileInfo& dataFileInfo);
};
} }