#pragma once

#include <string>

#include "adapters/il2cpp/Il2CppObjectInstance.h"
#include "adapters/eft/player/PlayerTypes.h"

namespace ta::adapters::eft::player::runtime
{
    class PlayerProgressionService
    {
    public:
        static void run_queued_actions(const Il2CppClass* game_world_class,
                                       ta::adapters::il2cpp::Il2CppObjectInstance& main_player,
                                       const PlayerQueuedActions& actions);

        static void enable_instant_search(ta::adapters::il2cpp::Il2CppObjectInstance& main_player);

    private:
        static void add_exp(Il2CppObject* profile_ptr,
                            const std::string& exp_type,
                            int exp_amount);

        static void add_fence_rep(ta::adapters::il2cpp::Il2CppObjectInstance& main_player,
                                  float amount,
                                  int source);

        static void add_trader_rep(const Il2CppClass* game_world_class,
                                   Il2CppObject* profile_ptr,
                                   int trader_index,
                                   const std::string& trader_name,
                                   float amount);

        static void set_skill(ta::adapters::il2cpp::Il2CppObjectInstance& main_player,
                              const std::string& skill_name,
                              int level);
    };
}
