namespace SVSim.EmulatedEntrypoint.Services;
public interface ICardAcquisitionService
{
///
/// Grant cards + associated cosmetics in one transaction.
///
/// • non-null → increments OwnedCardEntry for each via
/// the existing IPackRepository.GrantCardsToViewer primitive, then grants any
/// cosmetics associated with those cards that the viewer doesn't yet own.
/// • null → backfill mode: skips card mutation,
/// scans viewer.Cards, grants missing cosmetics.
///
/// Returns wire-shape RewardList in both modes. Backfill callers typically discard.
/// All ownership writes happen in a single SaveChangesAsync.
///
Task GrantAsync(long viewerId, IEnumerable? newCardIds = null);
}