using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Bot;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Utils;
namespace SPTarkov.Server.Core.Callbacks;
[Injectable]
public class BotCallbacks(BotController botController, HttpResponseUtil httpResponseUtil)
{
///
/// Handle singleplayer/settings/bot/limit
/// Is called by client to define each bot roles wave limit
///
///
public ValueTask GetBotLimit(string url, EmptyRequestData _, MongoId sessionID)
{
var splitUrl = url.Split('/');
var type = splitUrl[^1];
return new ValueTask(httpResponseUtil.NoBody(botController.GetBotPresetGenerationLimit(type)));
}
///
/// Handle singleplayer/settings/bot/difficulty
///
///
public ValueTask GetBotDifficulty(string url, EmptyRequestData _, MongoId sessionID)
{
var splitUrl = url.Split('/');
var type = splitUrl[^2].ToLowerInvariant();
var difficulty = splitUrl[^1];
if (difficulty == "core")
{
return new ValueTask(
httpResponseUtil.NoBody(botController.GetBotCoreDifficulty())
);
}
return new ValueTask(
httpResponseUtil.NoBody(botController.GetBotDifficulty(sessionID, type, difficulty))
);
}
///
/// Handle singleplayer/settings/bot/difficulties
///
///
public ValueTask GetAllBotDifficulties(
string url,
EmptyRequestData _,
MongoId sessionID
)
{
return new ValueTask(
httpResponseUtil.NoBody(botController.GetAllBotDifficulties())
);
}
///
/// Handle client/game/bot/generate
///
///
public ValueTask GenerateBots(
string url,
GenerateBotsRequestData info,
MongoId sessionID
)
{
return new ValueTask(
httpResponseUtil.GetBody(botController.Generate(sessionID, info))
);
}
///
/// Handle singleplayer/settings/bot/maxCap
///
///
public ValueTask GetBotCap(string url, EmptyRequestData _, MongoId sessionID)
{
var splitUrl = url.Split('/');
var location = splitUrl[^1];
return new ValueTask(httpResponseUtil.NoBody(botController.GetBotCap(location)));
}
///
/// Handle singleplayer/settings/bot/getBotBehaviours
///
///
public ValueTask GetBotBehaviours()
{
return new ValueTask(httpResponseUtil.NoBody(botController.GetAiBotBrainTypes()));
}
}