#pragma once

#include "adapters/config/PlayerConfigAdapter.h"
#include "application/actions/UiActionDispatcher.h"
#include "adapters/eft/player/EftPlayerGateway.h"
#include "adapters/windows/input/PlayerInputAdapter.h"
#include "features/player/PlayerFeature.h"
#include "bootstrap/modules/ModulePorts.h"

namespace ta::bootstrap::modules
{
    class PlayerModule final
    {
    public:
        PlayerModule(ta::adapters::eft::runtime::EftGameContext& context,
                     ta::application::UiActionDispatcher& actions);

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

    private:
        ta::adapters::config::PlayerConfigAdapter settings_;
        ta::adapters::windows::input::PlayerInputAdapter input_;
        ta::adapters::eft::player::EftPlayerGateway gateway_;
        ta::features::player::PlayerFeature feature_;
        ModulePorts ports_;
    };
}
