#pragma once

#include <set>
#include <string>
#include <vector>

#include "features/quests/contracts/QuestTypes.h"

namespace ta::features::quests::dependencies
{
    struct QuestProcessResult
    {
        bool visited = false;
        std::vector<contracts::QuestEntry> snapshot;
        std::set<std::string> completed_ids;
    };

    class IQuestGateway
    {
    public:
        virtual ~IQuestGateway() = default;

        [[nodiscard]] virtual QuestProcessResult process(
            const contracts::PendingQuestCommands& commands) = 0;
    };
}
