#pragma once

#include "adapters/config/WorldConfigAdapter.h"
#include "application/actions/UiActionDispatcher.h"
#include "adapters/eft/world/EftWorldGateway.h"
#include "features/world/WorldFeature.h"
#include "bootstrap/modules/ModulePorts.h"

namespace ta::bootstrap::modules
{
    class WorldModule final
    {
    public:
        WorldModule(ta::adapters::eft::runtime::EftGameContext& context,
                    ta::adapters::eft::items::WishlistService& wishlist_service,
                    ta::adapters::eft::items::ItemTemplateCatalogService& item_catalog_service,
                    ta::application::UiActionDispatcher& actions);

        [[nodiscard]] const ModulePorts& ports() const noexcept { return ports_; }
        [[nodiscard]] ta::features::world::WorldDiagnosticsSnapshot diagnostics_snapshot() const noexcept;

    private:
        ta::adapters::config::WorldConfigAdapter settings_;
        ta::adapters::eft::world::EftWorldGateway gateway_;
        ta::features::world::WorldFeature feature_;
        ModulePorts ports_;
    };
}
