using SVSim.EmulatedEntrypoint.Models.Dtos;
using SVSim.EmulatedEntrypoint.Models.Dtos.BattlePass;
namespace SVSim.EmulatedEntrypoint.Services;
public interface IBattlePassService
{
/// Global level curve as wire-string dictionary; null if no levels seeded.
Task?> GetLevelCurveAsync(CancellationToken ct);
///
/// /battle_pass/info payload. Returns null when no active season window covers now
/// (controller emits empty body in that case).
///
Task GetInfoAsync(long viewerId, CancellationToken ct);
///
/// /battle_pass/item_list payload. Returns one product per active season; empty products
/// array if the viewer already owns premium for the active season. Null when no active season.
///
Task GetItemListAsync(long viewerId, CancellationToken ct);
///
/// Purchase premium for the active season. Validates season_id matches active season,
/// product id derives from season, viewer has crystals, viewer isn't already premium.
/// On success: deducts crystals, flips IsPremium, retroactively grants premium rewards for
/// every level <= current_level not yet claimed. All-or-nothing transaction.
///
Task BuyPremiumAsync(long viewerId, int seasonId, int productId, CancellationToken ct);
}