#pragma once

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

#include "features/items/contracts/ItemCatalogTypes.h"
#include "features/items/contracts/ItemCommandTypes.h"
#include "features/items/contracts/ItemSelectorTypes.h"

namespace ta::features::items::dependencies
{
    class IItemGateway
    {
    public:
        virtual ~IItemGateway() = default;
        virtual void application_tick(const ta::features::items::contracts::ItemSettings& settings) = 0;
        virtual void game_tick(const ta::features::items::contracts::ItemSettings& settings,
                               std::vector<ta::features::items::contracts::ItemSelectorCommand> selector_commands,
                               std::optional<ta::features::items::contracts::ItemActionCommand> action) = 0;
        virtual void reset_session() noexcept = 0;

        [[nodiscard]] virtual std::shared_ptr<const ta::features::items::contracts::ItemCatalogSnapshot> catalog() const noexcept = 0;
        [[nodiscard]] virtual bool in_raid() const noexcept = 0;
    };
}
