using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Dialog;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
namespace SPTarkov.Server.Core.Callbacks;
[Injectable]
public class DataCallbacks(
HttpResponseUtil httpResponseUtil,
DatabaseService databaseService,
TraderController traderController,
HideoutController hideoutController,
LocaleService localeService
)
{
///
/// Handle client/settings
///
///
public ValueTask GetSettings(string url, EmptyRequestData _, MongoId sessionID)
{
var returns = httpResponseUtil.GetBody(databaseService.GetSettings());
return new ValueTask(returns);
}
///
/// Handle client/globals
///
///
public ValueTask GetGlobals(string url, EmptyRequestData _, MongoId sessionID)
{
var globals = databaseService.GetGlobals();
var returns = httpResponseUtil.GetBody(globals);
return new ValueTask(returns);
}
///
/// Handle client/items
///
///
public ValueTask GetTemplateItems(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetUnclearedBody(databaseService.GetItems()));
}
///
/// Handle client/handbook/templates
///
///
public ValueTask GetTemplateHandbook(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetHandbook()));
}
///
/// Handle client/customization
///
///
public ValueTask GetTemplateSuits(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetTemplates().Customization));
}
///
/// Handle client/account/customization
///
///
public ValueTask GetTemplateCharacter(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetTemplates().Character));
}
///
/// Handle client/hideout/settings
///
///
public ValueTask GetHideoutSettings(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetHideout().Settings));
}
///
/// Handle client/hideout/areas
///
///
public ValueTask GetHideoutAreas(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetHideout().Areas));
}
///
/// Handle client/hideout/production/recipes
///
///
public ValueTask GetHideoutProduction(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetHideout().Production));
}
///
/// Handle client/languages
///
///
public ValueTask GetLocalesLanguages(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetLocales().Languages));
}
///
/// Handle client/menu/locale
///
///
public ValueTask GetLocalesMenu(string url, EmptyRequestData _, MongoId sessionID)
{
var localeId = url.Replace("/client/menu/locale/", "");
var locales = databaseService.GetLocales();
var result = locales.Menu?[localeId] ?? locales.Menu?.FirstOrDefault(m => m.Key == "en").Value;
if (result == null)
{
throw new Exception($"Unable to determine locale for request with {localeId}");
}
return new ValueTask(httpResponseUtil.GetBody(result));
}
///
/// Handle client/locale
///
///
public ValueTask GetLocalesGlobal(string url, EmptyRequestData _, MongoId sessionID)
{
var localeId = url.Replace("/client/locale/", "");
var locales = localeService.GetLocaleDb(localeId);
return new ValueTask(httpResponseUtil.GetUnclearedBody(locales));
}
///
/// Handle client/hideout/qte/list
///
///
public ValueTask GetQteList(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetUnclearedBody(hideoutController.GetQteList(sessionID)));
}
///
/// Handle client/items/prices/
///
///
public ValueTask GetItemPrices(string url, EmptyRequestData _, MongoId sessionID)
{
var traderId = url.Replace("/client/items/prices/", "");
return new ValueTask(httpResponseUtil.GetBody(traderController.GetItemPrices(sessionID, traderId)));
}
///
/// Handle /client/dialogue
///
public ValueTask GetDialogue(string url, GetClientDialogueRequestData request, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetUnclearedBody(databaseService.GetTemplates().Dialogue));
}
}