#pragma once

#include "NVMeError.hpp"

#include <boost/asio.hpp>
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
#include <xyz/openbmc_project/Inventory/Item/Storage/server.hpp>
#include <xyz/openbmc_project/NVMe/Format/server.hpp>
#include <xyz/openbmc_project/Nvme/Storage/server.hpp>

#include <memory>
#include <vector>

using StorageBase =
    sdbusplus::xyz::openbmc_project::Inventory::Item::server::Storage;
using RelPerf =
    sdbusplus::xyz::openbmc_project::Nvme::server::Storage::RelativePerformance;

#include "NVMeDefs.hpp"

struct LBAFormat
{
    size_t index;
    // in bytes
    size_t blockSize;
    // in bytes
    size_t metadataSize;
    RelPerf relativePerformance;
};

RelPerf relativePerformanceFromRP(uint8_t rp);

class NVMeStorage : public StorageBase
{
  public:
    NVMeStorage(sdbusplus::asio::object_server& objServer,
                sdbusplus::bus_t& bus, const char* path);

    ~NVMeStorage() override;

    virtual sdbusplus::message::object_path
        createVolume(boost::asio::yield_context yield, uint64_t size,
                     size_t lbaFormat, bool metadataAtEnd) = 0;

    virtual void format(boost::asio::yield_context yield, uint8_t lbaFormat,
                        sdbusplus::xyz::openbmc_project::NVMe::server::Format::
                            SecureEraseSetting secureEraseSetting,
                        sdbusplus::xyz::openbmc_project::NVMe::server::Format::
                            DataProtectionType dataProtectionType) = 0;

  protected:
    // Called by parent class for setup after shared_ptr has been initialised
    // Will complete asynchronously.
    static void init(const std::shared_ptr<NVMeStorage>& self);

    void setSupportedFormats(const std::vector<LBAFormat>& formats);

  private:
    // NVMe-specific interface.
    // implemented manually for async, will eventually come from
    // sdbusplus::xyz::openbmc_project::Nvme::Storage
    std::shared_ptr<sdbusplus::asio::dbus_interface> nvmeStorageInterface;

    sdbusplus::asio::object_server& objServer;

    const std::string path;
};
