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.Match;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
using static SPTarkov.Server.Core.Services.MatchLocationService;
namespace SPTarkov.Server.Core.Callbacks;
[Injectable]
public class MatchCallbacks(HttpResponseUtil httpResponseUtil, MatchController matchController, DatabaseService databaseService)
{
///
/// Handle client/match/updatePing
///
///
///
/// Session/player id
///
public ValueTask UpdatePing(string url, UpdatePingRequestData info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/match/exit
///
///
///
/// Session/player id
///
public ValueTask ExitMatch(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/match/group/exit_from_menu
///
///
public ValueTask ExitFromMenu(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/match/group/current
///
///
public ValueTask GroupCurrent(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(new MatchGroupCurrentResponse { Squad = [] }));
}
///
/// Handle client/match/group/looking/start
///
///
public ValueTask StartGroupSearch(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/match/group/looking/stop
///
///
public ValueTask StopGroupSearch(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/match/group/invite/send
///
///
public ValueTask SendGroupInvite(string url, MatchGroupInviteSendRequest info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody("2427943f23698ay9f2863735"));
}
///
/// Handle client/match/group/invite/accept
///
///
public ValueTask AcceptGroupInvite(string url, RequestIdRequest info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(new List { new() }));
}
///
/// Handle client/match/group/invite/decline
///
///
///
/// Session/player id
///
public ValueTask DeclineGroupInvite(string url, RequestIdRequest info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/group/invite/cancel
///
///
///
/// Session/player id
///
public ValueTask CancelGroupInvite(string url, RequestIdRequest info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/group/transfer
///
///
///
/// Session/player id
///
public ValueTask TransferGroup(string url, MatchGroupTransferRequest info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/group/invite/cancel-all
///
///
public ValueTask CancelAllGroupInvite(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/putMetrics
///
///
public ValueTask PutMetrics(string url, PutMetricsRequestData info, MongoId sessionId)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/analytics/event-disconnect
///
///
public ValueTask EventDisconnect(string url, PutMetricsRequestData request, MongoId sessionId)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/match/available
///
///
public ValueTask ServerAvailable(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(matchController.GetEnabled()));
}
///
/// Handle match/group/start_game
///
///
public ValueTask JoinMatch(string url, MatchGroupJoinRequest request, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(matchController.JoinMatch(request, sessionID)));
}
///
/// Handle client/getMetricsConfig
///
///
public ValueTask GetMetrics(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(databaseService.GetMatch().Metrics));
}
///
/// Called periodically while in a group
/// Handle client/match/group/status
///
///
public ValueTask GetGroupStatus(string url, MatchGroupStatusRequest info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(matchController.GetGroupStatus(info)));
}
///
/// Handle client/match/group/delete
///
///
public ValueTask DeleteGroup(string url, DeleteGroupRequest info, MongoId sessionID)
{
matchController.DeleteGroup(info);
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/group/leave
///
///
public ValueTask LeaveGroup(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/group/player/remove
///
///
public ValueTask RemovePlayerFromGroup(string url, MatchGroupPlayerRemoveRequest info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/local/start
///
///
public ValueTask StartLocalRaid(string url, StartLocalRaidRequestData info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(matchController.StartLocalRaid(sessionID, info)));
}
///
/// Handle client/match/local/end
///
///
public ValueTask EndLocalRaid(string url, EndLocalRaidRequestData info, MongoId sessionID)
{
matchController.EndLocalRaid(sessionID, info);
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/raid/configuration
///
///
public ValueTask GetRaidConfiguration(string url, GetRaidConfigurationRequestData info, MongoId sessionID)
{
matchController.ConfigureOfflineRaid(info, sessionID);
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/raid/configuration-by-profile
///
///
///
/// Session/player id
///
public ValueTask GetConfigurationByProfile(string url, GetRaidConfigurationRequestData info, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.NullResponse());
}
///
/// Handle client/match/group/raid/ready
///
///
public ValueTask RaidReady(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/group/raid/not-ready
///
///
///
/// Session/player id
///
public ValueTask NotRaidReady(string url, EmptyRequestData _, MongoId sessionID)
{
return new ValueTask(httpResponseUtil.GetBody(true));
}
///
/// Handle client/match/group/start_game
///
public Task StartGameAsGroupLeader(string url, MatchGroupStartGameRequest? request, MongoId? sessionId)
{
// returns a ProfileStatusResponse object
throw new NotImplementedException();
}
}