#pragma once

#include "common/instance_id.hpp"

static constexpr uintmax_t pldmMaxInstanceIds = 32;

class TestInstanceIdDb : public pldm::InstanceIdDb
{
  public:
    TestInstanceIdDb() : TestInstanceIdDb(createDb()) {}

    ~TestInstanceIdDb()
    {
        std::filesystem::remove(dbPath);
    };

  private:
    static std::filesystem::path createDb()
    {
        static const char dbTmpl[] = "/tmp/db.XXXXXX";
        char dbName[sizeof(dbTmpl)] = {};

        ::strncpy(dbName, dbTmpl, sizeof(dbName));
        ::close(::mkstemp(dbName));

        std::filesystem::path dbPath(dbName);
        std::filesystem::resize_file(
            dbPath, static_cast<uintmax_t>(PLDM_MAX_TIDS) * pldmMaxInstanceIds);

        return dbPath;
    };

    TestInstanceIdDb(std::filesystem::path dbPath) :
        InstanceIdDb(dbPath), dbPath(dbPath)
    {}

    std::filesystem::path dbPath;
};
