Client-side helpers for the EMS backend. Defines response models for staff sync and medical bills, and wraps the MdtPost calls serverEmsSync, serverEmsRoster, serverEmsBill, serverEmsBills and serverEmsBillPay.
namespace HorizonRP;
/// <summary>
/// Les appels de l'API des secours (UCFD EMS) : effectifs, factures de soins. Clé du serveur,
/// appelés par l'hôte seul (Police/PoliceService.Ems.cs, Ems/EmsActions.cs) après avoir revérifié
/// les droits. Par l'envoi de la tablette (MdtPost) : il lit aussi les réponses 4xx, dont le
/// message en français (« Solde insuffisant… ») doit arriver au joueur.
/// </summary>
public static partial class Backend
{
/// <summary>Un secouriste inscrit, tel que serverEmsSync le rend.</summary>
public sealed class EmsStaffMember
{
public object SteamId { get; set; }
public string SteamIdText => SteamId?.ToString()?.Trim( '"' );
public string RpName { get; set; }
public int Grade { get; set; }
public string Badge { get; set; }
public string Callsign { get; set; }
}
public sealed class EmsSyncResponse
{
public bool Ok { get; set; }
public string Error { get; set; }
public List<EmsStaffMember> Staff { get; set; }
}
/// <summary>Une facture de soins (hz_medical_bills).</summary>
public sealed class EmsBill
{
public long Id { get; set; }
public int Amount { get; set; }
public string Status { get; set; }
public string Title { get; set; }
public string IssuedBy { get; set; }
public string IssuedAt { get; set; }
public string PaidAt { get; set; }
public bool Unpaid => Status == "impayee";
}
public sealed class EmsBillsResponse
{
public bool Ok { get; set; }
public string Error { get; set; }
public List<EmsBill> Bills { get; set; }
}
public sealed class EmsBillResponse
{
public bool Ok { get; set; }
public string Error { get; set; }
public long BillId { get; set; }
public int Amount { get; set; }
public string Title { get; set; }
/// <summary>Réglée sur place (payNow) : le solde HZ BANK après paiement, sinon null.</summary>
public int? Bank { get; set; }
}
public sealed class EmsBillPayResponse
{
public bool Ok { get; set; }
public string Error { get; set; }
public int Bank { get; set; }
public long BillId { get; set; }
public int Amount { get; set; }
}
public static Task<EmsSyncResponse> EmsSync()
=> MdtPost<EmsSyncResponse>( "serverEmsSync", new { } );
/// <summary>Effectifs en jeu : <paramref name="grade"/> null = renvoi.</summary>
public static Task<SimpleResponse> EmsRoster( ulong steamId, int? grade, string callsign, string by, int byGrade )
=> MdtPost<SimpleResponse>( "serverEmsRoster", new { steamId = steamId.ToString(), grade, callsign, by, byGrade } );
/// <summary>
/// Une facture de soins (ids de EmsRules.Tariffs ; le montant est recalculé par l'API). Avec
/// <paramref name="payNow"/> (l'accueil), réglée aussitôt depuis <paramref name="balance"/>.
/// </summary>
public static Task<EmsBillResponse> EmsBillCreate( ulong steamId, List<string> items, string notes, string by, ulong bySteam, bool payNow = false, int balance = 0 )
=> MdtPost<EmsBillResponse>( "serverEmsBill", new { steamId = steamId.ToString(), items, notes, by, bySteam = bySteam == 0 ? null : bySteam.ToString(), payNow, balance } );
public static Task<EmsBillsResponse> EmsBills( ulong steamId )
=> MdtPost<EmsBillsResponse>( "serverEmsBills", new { steamId = steamId.ToString() } );
/// <summary><paramref name="balance"/> : le solde que le jeu a en mémoire (il fait foi).</summary>
public static Task<EmsBillPayResponse> EmsBillPay( ulong steamId, long billId, int balance )
=> MdtPost<EmsBillPayResponse>( "serverEmsBillPay", new { steamId = steamId.ToString(), billId, balance } );
}