#pragma once

#include <cstdint>
#include <memory>
#include <optional>

#include "features/esp/contracts/EspTypes.h"
#include "foundation/math/CameraFrame.h"

namespace ta::features::esp::dependencies
{
    class IEspGateway
    {
    public:
        virtual ~IEspGateway() = default;
        virtual void application_tick() = 0;
        virtual void game_tick(const EspSettingsSnapshot& settings, std::uint64_t settings_revision) = 0;
        virtual void reset_session() noexcept = 0;
        [[nodiscard]] virtual std::shared_ptr<const EspWorldSnapshot> world() const noexcept = 0;
        [[nodiscard]] virtual std::optional<ta::foundation::math::CameraFrame> camera() const = 0;
    };
}
