using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine.TextCore.Text; namespace BulletHellTemplate { public interface IBackendService { /*──────────────────── AUTH ────────────────────*/ UniTask AccountLogin(string email,string pass); UniTask AccountRegister(string email, string pass, string confirmPass); UniTask PlayAsGuest(); UniTask TryAutoLoginAsync(); UniTask Logout(); /*──────────────────── LOAD ────────────────────*/ UniTask LoadAllAccountDataAsync(); /*──────────────────── ACCOUNT ────────────────────*/ UniTask ChangePlayerNameAsync(string newName); UniTask ChangePlayerIconAsync(string iconId); UniTask ChangePlayerFrameAsync(string frameId); /*──────────────────── CURRENCY ───────────────────*/ UniTask InitCurrencyRechargeAsync(); /*──────────────────── CHARACTERS & ITEMS ─────────*/ UniTask UpdateSelectedCharacterAsync(int characterId); UniTask UpdatePlayerCharacterFavouriteAsync(int characterId); UniTask UnlockCharacterSkin(int characterId, int skinId); UniTask UpdateCharacterSkin(int characterId, int skinId); UniTask UpdateCharacterLevelUP(int characterId); UniTask UpdateCharacterStatUpgradeAsync(StatUpgrade statUpgrade,CharacterStatsRuntime stats ,int characterId); /*──────────────────── MAP / SCORE ────────────────*/ UniTask CompleteGameSessionAsync(EndGameSessionData sessionData); /*──────────────────── QUESTS / COUPON ────────────*/ UniTask CompleteQuestAsync(int questId); UniTask RefreshQuestLevelProgressAsync(); UniTask RedeemCouponAsync(string code); /*──────────────────── BATTLE-PASS ───────────────*/ /*──────────────────── INVENTORY ───────────────────*/ UniTask UpgradeInventoryItemAsync(string uniqueItemGuid, InventoryItem inventorySO); UniTask SetCharacterItemAsync(int characterId, string slotName, string uniqueItemGuid); UniTask DeletePurchasedInventoryItemAsync(string uniqueItemGuid); /*──────────────────── PURCHASING ───────────────────*/ UniTask PurchaseShopItemAsync(ShopItem shopItem); UniTask UnlockBattlePassPremiumAsync(); UniTask ClaimBattlePassRewardAsync(BattlePassItem reward); /*──────────────────── REWARDS (daily/new) ───────*/ UniTask ClaimDailyRewardAsync(int day, BattlePassItem reward); UniTask ClaimNewPlayerRewardAsync(int day, BattlePassItem reward); UniTask ApplyMapRewardsAsync(MapCompletionRewardData mapCompletionData); /*──────────────────── LEADERBOARD ───────────────*/ UniTask>> GetTopPlayersAsync(int limit = 20); UniTask GetPlayerRankAsync(); /*──────────────────── DEBUG ───────────────*/ UniTask TestAddAccountExpAsync(int exp); UniTask TestAddCharacterExpAsync(int cid, int exp); UniTask TestAddCharacterMasteryExpAsync(int cid, int exp); UniTask TestAddBattlePassXpAsync(int amount); } /// Uniform return for any attempt. public readonly struct RequestResult { public readonly bool Success; public readonly string Reason; // “Not enough coins”, “Already owned”, etc. public static RequestResult Ok() => new(true, null); public static RequestResult Ok(string reasonMsg) => new(true, reasonMsg); public static RequestResult Fail() => new(false, null); public static RequestResult Fail(string reasonMsg) => new(false, reasonMsg); private RequestResult(bool success, string reason) { Success = success; Reason = reason; } } }