#pragma once

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

#include "adapters/il2cpp/Il2CppObjectInstance.h"
#include "features/quests/contracts/QuestTypes.h"

namespace ta::adapters::eft::quests
{
    class QuestConditionService
    {
    public:
        using ConditionEntryList = std::vector<ta::features::quests::contracts::QuestConditionEntry>;

        static ConditionEntryList collect_condition_entries(
            ta::adapters::il2cpp::Il2CppObjectInstance& quest,
            ta::adapters::il2cpp::Il2CppObjectInstance main_player);
        static void complete_all_conditions(
            ta::adapters::il2cpp::Il2CppObjectInstance& quest,
            ta::adapters::il2cpp::Il2CppObjectInstance main_player);
        static void complete_selected_conditions(
            ta::adapters::il2cpp::Il2CppObjectInstance& quest,
            ta::adapters::il2cpp::Il2CppObjectInstance main_player,
            const std::set<std::string>& selected_ids);
        static void set_quest_status_completed(
            ta::adapters::il2cpp::Il2CppObjectInstance& quest,
            const std::string& quest_id);
    };
}
