namespace ManagerService.Helpers
{
///
/// Seule source de vérité pour « quel quota de stockage s'applique à cette instance ».
///
/// Les deux lectures divergeaient : le pré-vol du téléversement lisait le quota du
/// **plan**, l'écran de quota lisait celui de l'**instance** avec le plan en repli.
/// Une instance dont le quota a été surchargé — le mécanisme même de l'add-on —
/// affichait donc un chiffre et se faisait bloquer sur un autre.
///
public static class StorageQuota
{
///
/// La surcharge portée par l'instance l'emporte ; 0 veut dire « pas de surcharge »
/// et renvoie au plan. ⚠️ Au niveau du plan, 0 garde son autre sens : illimité.
/// L'asymétrie est volontaire et documentée au §1quinquies — ne pas l'harmoniser
/// sans repasser dans CheckQuota, AiController et SectionIndexingInterceptor.
///
public static long Resolve(long instanceQuotaBytes, long planQuotaBytes) =>
instanceQuotaBytes != 0 ? instanceQuotaBytes : planQuotaBytes;
///
/// Un quota résolu à 0 est illimité : rien ne dépasse. C'est le cas d'Enterprise,
/// et c'est aussi ce qui protège une instance sans plan d'être bloquée à zéro octet.
///
public static bool Exceeds(long usedBytes, long incomingBytes, long quotaBytes) =>
quotaBytes > 0 && usedBytes + incomingBytes > quotaBytes;
}
}