using System; using System.Collections.Generic; using System.Threading.Tasks; using Vanguard.Api; using Vanguard.Api.Contracts; using Vanguard.State; namespace Vanguard.Meta { /// Обёртка над мета-эндпоинтами: магазин, коллекция, колоды. public sealed class MetaService { private readonly ApiClient _api; private readonly PlayerState _player; public MetaService(ApiClient api, PlayerState player) { _api = api; _player = player; } public string BaseUrl => _api.BaseUrl; public async Task GetStoreAsync() { var store = await _api.GetAsync("/api/store"); _player.ApplyBalances(store.Balances); return store; } public async Task OnboardAsync(string deckId) { var response = await _api.PostAsync( "/api/meta/onboarding", new OnboardingRequest { DeckId = deckId }); _player.ApplyBalances(response.Balances); _player.MarkOnboarded(response.DeckId); return response; } public async Task GetCollectionAsync() { var collection = await _api.GetAsync("/api/collection"); _player.ApplyBalances(collection.Balances); return collection; } public async Task DismantleAsync(string printingId, int count) { var balances = await _api.PostAsync( "/api/collection/dismantle", new DismantleRequest { PrintingId = printingId, Count = count, IdempotencyKey = Guid.NewGuid().ToString("N"), }); _player.ApplyBalances(balances); return balances; } public async Task> GetDecksAsync() { var decks = await _api.GetAsync>("/api/decks"); return decks ?? new List(); } public async Task CreateDeckAsync(string name, List cards) => await _api.PostAsync( "/api/decks", new DeckRequest { Name = name, Cards = cards }); public Task DeleteDeckAsync(Guid deckId) => _api.DeleteAsync("/api/decks/" + deckId.ToString("D")); public async Task ValidateDeckAsync(Guid deckId, List cards) => await _api.PostAsync( "/api/decks/" + deckId.ToString("D") + "/validate", new DeckRequest { Cards = cards }); public async Task EnqueueAsync(Guid deckId, string mode) => await _api.PostAsync( "/api/game/queue", new QueueRequest { DeckId = deckId, Mode = mode }); public async Task GetQueueStatusAsync(Guid queueId) => await _api.GetAsync( "/api/game/queue/" + queueId.ToString("D")); public Task CancelQueueAsync(Guid queueId) => _api.DeleteAsync("/api/game/queue/" + queueId.ToString("D")); public async Task CreateTicketAsync(string matchId) => await _api.PostAsync( "/api/game/tickets", new TicketRequest { MatchId = matchId }); } }