#pragma once

#include "adapters/eft/quests/EftQuestGateway.h"
#include "features/quests/QuestFeature.h"
#include "bootstrap/modules/ModulePorts.h"

namespace ta::bootstrap::modules
{
    class QuestModule final
    {
    public:
        explicit QuestModule(ta::adapters::eft::runtime::EftGameContext& context);

        [[nodiscard]] const ModulePorts& ports() const noexcept { return ports_; }
        [[nodiscard]] ta::features::quests::contracts::IQuestQueries& queries() noexcept;
        [[nodiscard]] const ta::features::quests::contracts::IQuestQueries& queries() const noexcept;
        [[nodiscard]] ta::features::quests::contracts::IQuestCommands& commands() noexcept;
        [[nodiscard]] ta::features::quests::QuestDiagnosticsSnapshot diagnostics_snapshot() const noexcept;

    private:
        ta::adapters::eft::quests::EftQuestGateway gateway_;
        ta::features::quests::QuestFeature feature_;
        ModulePorts ports_;
    };
}
