#pragma once

#include "adapters/config/EspConfigAdapter.h"
#include "adapters/eft/esp/EftEspGateway.h"
#include "features/esp/EspFeature.h"
#include "bootstrap/modules/ModulePorts.h"

namespace ta::bootstrap::modules
{
    class EspModule final
    {
    public:
        EspModule(ta::adapters::eft::runtime::EftGameContext& context,
                  ta::adapters::eft::items::WishlistService& wishlist_service);

        [[nodiscard]] const ModulePorts& ports() const noexcept { return ports_; }
        [[nodiscard]] ta::features::esp::contracts::IEspQueries& queries() noexcept;

    private:
        ta::adapters::config::EspConfigAdapter settings_;
        ta::adapters::eft::esp::EftEspGateway gateway_;
        ta::features::esp::EspFeature feature_;
        ModulePorts ports_;
    };
}
