#ifndef OPENMW_COMPONENTS_DETOURNAVIGATOR_SERIALIZATION_H
#define OPENMW_COMPONENTS_DETOURNAVIGATOR_SERIALIZATION_H

#include <cstddef>
#include <cstdint>
#include <vector>

namespace DetourNavigator
{
    class RecastMesh;
    struct DbRefGeometryObject;
    struct PreparedNavMeshData;
    struct RecastSettings;
    struct AgentBounds;

    constexpr char recastMeshMagic[] = { 'r', 'c', 's', 't' };
    constexpr std::uint32_t recastMeshVersion = 2;

    constexpr char preparedNavMeshDataMagic[] = { 'p', 'n', 'a', 'v' };
    constexpr std::uint32_t preparedNavMeshDataVersion = 1;

    std::vector<std::byte> serialize(const RecastSettings& settings, const AgentBounds& agentBounds,
        const RecastMesh& recastMesh, const std::vector<DbRefGeometryObject>& dbRefGeometryObjects);

    std::vector<std::byte> serialize(const PreparedNavMeshData& value);

    bool deserialize(const std::vector<std::byte>& data, PreparedNavMeshData& value);
}

#endif
