//using Firebase.Auth; //using Firebase.Firestore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using UnityEngine; using static BulletHellTemplate.PlayerSave; namespace BulletHellTemplate { public class FirebaseSave : MonoBehaviour { //public static FirebaseSave Singleton; //public FirebaseUser user; //public FirebaseFirestore firestore; //private void Awake() //{ // if (Singleton == null) // { // Singleton = this; // } // else // { // Destroy(gameObject); // return; // } // DontDestroyOnLoad(gameObject); //} //public void InitializeFirebase(FirebaseUser _user, FirebaseFirestore _firestore) //{ // user = _user; // firestore = _firestore; //} ///// ///// Updates the player's icon in Firestore. ///// ///// The new icon ID to set. //public async Task UpdatePlayerIcon(string newIconId) //{ // if (user != null) // { // try // { // DocumentReference docRef = firestore.Collection("Players").Document(user.UserId); // await docRef.UpdateAsync("PlayerIcon", newIconId); // Debug.Log("Player icon updated successfully."); // } // catch (Exception e) // { // Debug.LogError("Failed to update player icon: " + e.Message); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Updates the player's frame in Firestore. ///// ///// The new frame ID to set. //public async Task UpdatePlayerFrame(string newFrameId) //{ // if (user != null) // { // try // { // DocumentReference docRef = firestore.Collection("Players").Document(user.UserId); // await docRef.UpdateAsync("PlayerFrame", newFrameId); // Debug.Log("Player frame updated successfully."); // } // catch (Exception e) // { // Debug.LogError("Failed to update player frame: " + e.Message); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Updates the player's account level and current experience in Firestore. ///// ///// The new account level to set. ///// The new current experience to set. //public async Task UpdatePlayerAccountLevel(int level, int currentExp) //{ // if (user != null) // { // try // { // DocumentReference docRef = firestore.Collection("Players").Document(user.UserId); // var data = new Dictionary // { // { "AccountLevel", level }, // { "AccountCurrentExp", currentExp } // }; // await docRef.SetAsync(data, SetOptions.MergeAll); // Debug.Log("Account info updated successfully."); // } // catch (Exception e) // { // Debug.LogError("Failed to update account info: " + e.Message); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Updates the player's name in Firestore. ///// ///// The new player name to set. //public async Task UpdatePlayerName(string newName) //{ // if (user != null) // { // try // { // // Validate the new player name // if (string.IsNullOrWhiteSpace(newName) || newName.Length < 3 || newName.Length > 14) // { // Debug.LogError("Player name must be between 3 and 14 characters."); // return; // } // // Check if the new player name already exists in the database // bool nameExists = await CheckIfNameExists(newName); // if (nameExists) // { // Debug.LogError("The player name already exists."); // return; // } // // Update the player's name in Firestore // DocumentReference docRef = firestore.Collection("Players").Document(user.UserId); // await docRef.UpdateAsync("PlayerName", newName); // // Update the player's name locally // PlayerSave.SetPlayerName(newName); // Debug.Log("Player name updated successfully."); // } // catch (Exception e) // { // Debug.LogError("Failed to update player name: " + e.Message); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Checks if a player name already exists in the Firestore database. ///// ///// The name to check. ///// True if the name exists; otherwise, false. //public async Task CheckIfNameExists(string playerName) //{ // try // { // // Reference to the "Players" collection // CollectionReference playersCollection = firestore.Collection("Players"); // // Create a query to find documents where "PlayerName" equals the provided name // Query query = playersCollection.WhereEqualTo("PlayerName", playerName); // // Execute the query and get a snapshot of the results // QuerySnapshot querySnapshot = await query.GetSnapshotAsync(); // // Check if any document exists in the result // return querySnapshot.Count > 0; // } // catch (Exception e) // { // Debug.LogError("Failed to check if name exists: " + e.Message); // return false; // } //} ///// ///// Updates the amount of a specific currency in Firestore. ///// ///// The ID of the currency to update. ///// The new amount to set for the currency. //public async Task UpdateCurrencies(string currencyId, int newAmount) //{ // if (user != null) // { // try // { // DocumentReference currencyDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Currencies") // .Document(currencyId); // await currencyDocRef.UpdateAsync("amount", newAmount); // Debug.Log($"Currency {currencyId} updated successfully to {newAmount}."); // } // catch (Exception e) // { // Debug.LogError($"Failed to update currency {currencyId}: " + e.Message); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Updates the selected character for the logged-in user in Firestore. ///// If the field doesn't exist, it creates it. ///// ///// The ID of the selected character to save. //public async Task UpdateSelectedCharacter(int characterId) //{ // if (user != null) // { // try // { // DocumentReference docRef = firestore.Collection("Players").Document(user.UserId); // await docRef.UpdateAsync("selectedCharacter", characterId); // Debug.Log($"Selected character updated successfully: {characterId}"); // } // catch (Exception e) // { // if (e.Message.Contains("No document to update")) // { // Debug.LogWarning("Document does not exist, creating field instead."); // Dictionary data = new Dictionary // { // { "selectedCharacter", characterId } // }; // await firestore.Collection("Players").Document(user.UserId).SetAsync(data, SetOptions.MergeAll); // Debug.Log($"Selected character created successfully: {characterId}"); // } // else // { // Debug.LogError($"Failed to update or create selected character: {e.Message}"); // } // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Updates the list of purchased items for the currently logged-in user in Firestore. ///// ///// A task representing the asynchronous operation. //public async Task SavePurchasedItemsAsync() //{ // try // { // if (user == null) // { // Debug.LogError("No user is currently logged in."); // return; // } // string userId = user.UserId; // var characters = MonetizationManager.Singleton.GetPurchasedCharacters(); // var icons = MonetizationManager.Singleton.GetPurchasedIcons(); // var frames = MonetizationManager.Singleton.GetPurchasedFrames(); // var shopItems = MonetizationManager.Singleton.GetPurchasedShopItems(); // // Convert lists to the format suitable for Firestore // var characterData = characters.Select(c => JsonUtility.ToJson(c)).ToList(); // var iconData = icons.Select(i => JsonUtility.ToJson(i)).ToList(); // var frameData = frames.Select(f => JsonUtility.ToJson(f)).ToList(); // var shopItemData = shopItems.Select(s => JsonUtility.ToJson(s)).ToList(); // var db = FirebaseFirestore.DefaultInstance; // var batch = db.StartBatch(); // // Save purchased characters // var characterDocRef = db.Collection("Players").Document(userId).Collection("PurchasedItems").Document("Characters"); // batch.Set(characterDocRef, new { Characters = characterData }); // // Save purchased icons // var iconDocRef = db.Collection("Players").Document(userId).Collection("PurchasedItems").Document("Icons"); // batch.Set(iconDocRef, new { Icons = iconData }); // // Save purchased frames // var frameDocRef = db.Collection("Players").Document(userId).Collection("PurchasedItems").Document("Frames"); // batch.Set(frameDocRef, new { Frames = frameData }); // // Save purchased shop items // var shopItemDocRef = db.Collection("Players").Document(userId).Collection("PurchasedItems").Document("ShopItems"); // batch.Set(shopItemDocRef, new { ShopItems = shopItemData }); // // Commit the batch operation // await batch.CommitAsync(); // Debug.Log("Purchased items saved successfully."); // } // catch (Exception ex) // { // Debug.LogError("Error saving purchased items: " + ex.Message); // } //} ///// ///// Saves the upgrades of a specific character to Firebase Firestore. ///// ///// The ID of the character. ///// The dictionary containing upgrade data. //public async Task SaveCharacterUpgradesAsync(string characterId, Dictionary upgrades) //{ // if (user != null) // { // try // { // DocumentReference upgradesDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Characters") // .Document(characterId) // .Collection("Upgrades") // .Document("Stats"); // Dictionary upgradesData = new Dictionary(); // foreach (var upgrade in upgrades) // { // upgradesData[upgrade.Key.ToString()] = upgrade.Value; // } // await upgradesDocRef.SetAsync(upgradesData); // Debug.Log($"Character upgrades for {characterId} saved successfully."); // } // catch (Exception e) // { // Debug.LogError($"Failed to save character upgrades for {characterId}: " + e.Message); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Saves the unlocked skins for a specific character to Firebase Firestore. ///// ///// The ID of the character as a string. ///// List of unlocked skin indices. //public async Task SaveCharacterUnlockedSkinsAsync(string characterId, List unlockedSkins) //{ // if (user != null) // { // try // { // DocumentReference skinsDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Characters") // .Document(characterId) // .Collection("UnlockedSkins") // .Document("Skins"); // Dictionary skinsData = new Dictionary // { // { "skins", unlockedSkins } // }; // await skinsDocRef.SetAsync(skinsData); // Debug.Log($"Character unlocked skins for {characterId} saved successfully."); // } // catch (Exception e) // { // Debug.LogError($"Failed to save unlocked skins for {characterId}: {e.Message}"); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} ///// ///// Saves the unlocked maps for the player to Firebase Firestore. ///// ///// A task representing the asynchronous operation. //public async Task SaveUnlockedMapsAsync() //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // List unlockedMapIds = PlayerSave.GetUnlockedMaps(); // Dictionary mapsData = new Dictionary(); // foreach (int mapId in unlockedMapIds) // { // mapsData[mapId.ToString()] = true; // } // DocumentReference mapsDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Progress") // .Document("UnlockedMaps"); // await mapsDocRef.SetAsync(mapsData); // Debug.Log("Unlocked maps saved to Firebase successfully."); // } // catch (Exception e) // { // Debug.LogError("Failed to save unlocked maps: " + e.Message); // } //} ///// ///// Saves a used coupon to Firebase Firestore. ///// ///// The unique ID of the coupon. ///// A task representing the asynchronous operation. //public async Task SaveUsedCouponAsync(string couponId) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // DocumentReference couponsDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Progress") // .Document("UsedCoupons"); // DocumentSnapshot snapshot = await couponsDocRef.GetSnapshotAsync(); // if (!snapshot.Exists) // { // // If the document does not exist, create it with the initial coupon // await couponsDocRef.SetAsync(new Dictionary // { // { couponId, true } // }); // Debug.Log($"Coupon {couponId} created and saved to Firebase successfully."); // } // else // { // await couponsDocRef.UpdateAsync(new Dictionary // { // { couponId, true } // }); // Debug.Log($"Coupon {couponId} saved to Firebase successfully."); // } // } // catch (Exception e) // { // Debug.LogError($"Failed to save used coupon {couponId} to Firebase: " + e.Message); // } //} ///// ///// Saves the progress of a quest to Firebase Firestore. ///// ///// The ID of the quest. ///// The progress value to save. ///// A task representing the asynchronous operation. //public async Task SaveQuestProgressAsync(int questId, int progress) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // DocumentReference questsDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Progress") // .Document("Quests"); // DocumentSnapshot snapshot = await questsDocRef.GetSnapshotAsync(); // if (!snapshot.Exists) // { // // If the document does not exist, create it with the initial quest progress // await questsDocRef.SetAsync(new Dictionary // { // { questId.ToString(), progress } // }); // Debug.Log($"Quest progress for {questId} created and saved successfully in Firebase."); // } // else // { // // If the document exists, update the quest progress // await questsDocRef.UpdateAsync(new Dictionary // { // { questId.ToString(), progress } // }); // Debug.Log($"Quest progress for {questId} updated successfully in Firebase."); // } // } // catch (Exception e) // { // Debug.LogError($"Failed to save quest progress for {questId}: {e.Message}"); // } //} ///// ///// Saves the completion status of a quest to Firebase Firestore, including the completion timestamp. ///// ///// The ID of the quest. ///// A task representing the asynchronous operation. //public async Task SaveQuestCompletionAsync(int questId) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // DocumentReference questsDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Progress") // .Document("Quests"); // string questKey = "Complete " + questId.ToString(); // Format key as "Complete X" // // Get the current timestamp // Timestamp completionTimestamp = Timestamp.GetCurrentTimestamp(); // // Check if the document exists // DocumentSnapshot snapshot = await questsDocRef.GetSnapshotAsync(); // if (snapshot.Exists) // { // await questsDocRef.UpdateAsync(new Dictionary // { // { questKey, 1 }, // Assuming 1 represents completion // { questKey + "_Timestamp", completionTimestamp } // Save completion timestamp // }); // } // else // { // // If the document doesn't exist, create it with the quest completion status and timestamp // await questsDocRef.SetAsync(new Dictionary // { // { questKey, 1 }, // Assuming 1 represents completion // { questKey + "_Timestamp", completionTimestamp } // Save completion timestamp // }); // } // Debug.Log($"Quest completion for {questId} saved successfully in Firebase with timestamp."); // } // catch (Exception e) // { // Debug.LogError($"Failed to save quest completion for {questId}: {e.Message}"); // } //} ///// ///// Saves the number of monsters killed by the player to their Firestore document. ///// The total number of kills is incremented by the amount achieved in the current game session. ///// ///// The number of monsters killed in the current session. //public async Task SaveMonstersKilledAsync(int monstersKilled) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // DocumentReference playerDocRef = firestore // .Collection("Players") // .Document(user.UserId); // try // { // DocumentSnapshot snapshot = await playerDocRef.GetSnapshotAsync(); // double currentScore = 0; // // If the document exists and the "score" field is present, retrieve the current score. // if (snapshot.Exists && snapshot.ContainsField("score")) // { // currentScore = Convert.ToDouble(snapshot.GetValue("score")); // } // else // { // Debug.Log("No score found for the player, starting from 0."); // } // // Add the new kills to the current score // currentScore += monstersKilled; // // Update the Firestore document with the new score // await playerDocRef.UpdateAsync("score", currentScore.ToString()); // Debug.Log($"Monsters killed ({monstersKilled}) added to player's score. New score: {currentScore}"); // } // catch (Exception e) // { // Debug.LogError($"Failed to save monsters killed to Firestore: {e.Message}"); // } //} ///// ///// Saves the PlayerCharacterFavourite to Firestore. ///// ///// The ID of the character to save as favourite. //public async Task SavePlayerCharacterFavouriteAsync(int characterId) //{ // if (user != null) // { // try // { // DocumentReference docRef = firestore.Collection("Players").Document(user.UserId); // DocumentSnapshot snapshot = await docRef.GetSnapshotAsync(); // if (snapshot.Exists) // { // Dictionary playerData = snapshot.ToDictionary(); // if (playerData.ContainsKey("PlayerCharacterFavourite")) // { // // Update the existing field // await docRef.UpdateAsync("PlayerCharacterFavourite", characterId); // } // else // { // // Create the field if it doesn't exist // await docRef.SetAsync(new Dictionary { { "PlayerCharacterFavourite", characterId } }, SetOptions.MergeFields("PlayerCharacterFavourite")); // } // Debug.Log("PlayerCharacterFavourite saved successfully."); // } // else // { // Debug.LogWarning("Player document does not exist."); // } // } // catch (Exception e) // { // Debug.LogError("Failed to save PlayerCharacterFavourite: " + e.Message); // } // } // else // { // Debug.LogError("No user is logged in."); // } //} //public async Task SaveClaimedRewardAsync(string passItemId) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // DocumentReference rewardsDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Progress") // .Document("BattlePassRewards"); // DocumentSnapshot snapshot = await rewardsDocRef.GetSnapshotAsync(); // if (snapshot.Exists) // { // await rewardsDocRef.UpdateAsync(new Dictionary // { // { passItemId, true } // }); // } // else // { // await rewardsDocRef.SetAsync(new Dictionary // { // { passItemId, true } // }); // } // Debug.Log($"Claimed reward {passItemId} saved to Firebase."); // } // catch (Exception e) // { // Debug.LogError($"Failed to save claimed reward {passItemId} to Firebase: {e.Message}"); // } //} //public async Task SaveBattlePassProgressAsync(int currentXP, int currentLevel, bool isUnlocked) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // DocumentReference battlePassDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Progress") // .Document("BattlePass"); // Dictionary battlePassData = new Dictionary //{ // { "CurrentXP", currentXP }, // { "CurrentLevel", currentLevel }, // { "IsUnlocked", isUnlocked } //}; // await battlePassDocRef.SetAsync(battlePassData); // Debug.Log("Battle Pass progress saved to Firebase successfully."); // } // catch (Exception e) // { // Debug.LogError("Failed to save Battle Pass progress: " + e.Message); // } //} ///// ///// Saves basic character info (skin, level, experience, mastery) to Firestore and updates local PlayerSave. ///// ///// ID of the character. ///// Index of the selected skin. Use -1 if no skin is selected. ///// Character level. ///// Current experience points. ///// Current mastery level. ///// Current mastery experience points. //public async Task SaveCharacterBasicInfoAsync(int characterId, int skinIndex, int level, int currentExp, int masteryLevel, int masteryExp) //{ // try // { // DocumentReference charDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Characters") // .Document(characterId.ToString()); // Dictionary data = new Dictionary // { // { "CharacterSelectedSkin", skinIndex }, // { "CharacterLevel", level }, // { "CharacterCurrentExp", currentExp }, // { "CharacterMasteryLevel", masteryLevel }, // { "CharacterCurrentMasteryExp", masteryExp } // }; // // Update Firestore // await charDocRef.SetAsync(data, SetOptions.MergeAll); // Debug.Log($"Character basic info saved for CharacterId {characterId}."); // ; // } // catch (Exception e) // { // Debug.LogError($"Failed to save character basic info for {characterId}: {e.Message}"); // } //} ///// ///// Saves an item to the sub-collection named by 'slotName' under the character document. ///// Each item is stored in its own document, named by the unique item identifier. ///// Path: Players/{userId}/Characters/{characterId}/{slotName}/{uniqueItemGuid} ///// ///// ID of the character. ///// Slot name (e.g. "WeaponSlot" or "RuneSlot"). ///// Unique ID for this item doc. ///// ID of the item (scriptable or otherwise). ///// Level of the item. //public async Task SaveCharacterItemAsync(int characterId, string slotName, string uniqueItemGuid, string itemId, int itemLevel) //{ // try // { // // Example: /Players/{userId}/Characters/{characterId}/{slotName}/{uniqueItemGuid} // DocumentReference itemDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Characters") // .Document(characterId.ToString()) // .Collection(slotName) // <-- The "slotName" subcollection // .Document(uniqueItemGuid); // Dictionary data = new Dictionary //{ // { "ItemId", itemId }, // { "ItemLevel", itemLevel } //}; // await itemDocRef.SetAsync(data, SetOptions.MergeAll); // Debug.Log($"[SaveCharacterItemAsync] Item saved: Char {characterId}, Slot {slotName}, Doc {uniqueItemGuid}."); // } // catch (Exception e) // { // Debug.LogError($"Failed to save item for CharId {characterId}, slot {slotName}: {e.Message}"); // } //} ///// ///// Removes (unequips) an item document from the specified slot of the character. ///// Path: Players/{userId}/Characters/{characterId}/{slotName}/{uniqueItemGuid} ///// //public async Task RemoveCharacterItemAsync(int characterId, string slotName, string uniqueItemGuid) //{ // try // { // DocumentReference docRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Characters") // .Document(characterId.ToString()) // .Collection(slotName) // .Document(uniqueItemGuid); // await docRef.DeleteAsync(); // Debug.Log($"[RemoveCharacterItemAsync] Removed item {uniqueItemGuid} from slot {slotName} of Char {characterId}."); // } // catch (Exception e) // { // Debug.LogError($"Failed to remove item {uniqueItemGuid} from char {characterId}, slot {slotName}: {e.Message}"); // } //} ///// ///// Saves a purchased inventory item into Firestore (Players/{userId}/PurchasedItems/Items/{uniqueItemGuid}). ///// Also updates local data if desired. ///// //public async Task SavePurchasedInventoryItemAsync(PurchasedInventoryItem purchasedItem) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // DocumentReference itemDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("PurchasedItems") // .Document("Items") // .Collection("List") // .Document(purchasedItem.uniqueItemGuid); // Dictionary data = new Dictionary //{ // { "uniqueItemGuid", purchasedItem.uniqueItemGuid }, // { "itemId", purchasedItem.itemId }, // { "itemLevel", purchasedItem.itemLevel } //}; // Dictionary upgradesDict = new Dictionary(); // if (purchasedItem.upgrades != null) // { // foreach (var kvp in purchasedItem.upgrades) // { // upgradesDict[kvp.Key.ToString()] = kvp.Value; // } // } // data["itemUpgrades"] = upgradesDict; // await itemDocRef.SetAsync(data, SetOptions.MergeAll); // Debug.Log($"Purchased item saved: {purchasedItem.uniqueItemGuid} -> {purchasedItem.itemId}."); // } // catch (Exception e) // { // Debug.LogError($"Failed to save purchased inventory item {purchasedItem.uniqueItemGuid}: {e.Message}"); // } //} ///// ///// Deletes a purchased inventory item from Firestore: ///// Players/{userId}/PurchasedItems/Items/List/{uniqueItemGuid}. ///// Also checks all characters to remove the item from sub-collection Items if present. ///// Finally, removes it locally from MonetizationManager and InventorySave. ///// ///// The unique item GUID to delete. //public async Task DeletePurchasedInventoryItemAsync(string uniqueItemGuid) //{ // if (user == null) // { // Debug.LogError("No user is logged in."); // return; // } // try // { // // 1) Remove from "PurchasedItems" // DocumentReference itemDocRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("PurchasedItems") // .Document("Items") // .Collection("List") // .Document(uniqueItemGuid); // await itemDocRef.DeleteAsync(); // Debug.Log($"Item {uniqueItemGuid} deleted from PurchasedItems."); // // 2) Check all characters for this item // foreach (var cd in GameInstance.Singleton.characterData) // { // int charId = cd.characterId; // // Attempt to remove from the character's "Items" sub-collection // DocumentReference charItemDoc = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("Characters") // .Document(charId.ToString()) // .Collection("Items") // .Document(uniqueItemGuid); // await charItemDoc.DeleteAsync(); // // It's okay if doc doesn't exist, no error is thrown for a missing doc // } // // 3) Remove locally from MonetizationManager // var allItems = MonetizationManager.Singleton.GetPurchasedInventoryItems(); // var foundItem = allItems.Find(i => i.uniqueItemGuid == uniqueItemGuid); // if (foundItem != null) // { // allItems.Remove(foundItem); // // Update the manager // MonetizationManager.Singleton.UpdatePurchasedItems( // MonetizationManager.Singleton.GetPurchasedCharacters(), // MonetizationManager.Singleton.GetPurchasedIcons(), // MonetizationManager.Singleton.GetPurchasedFrames(), // MonetizationManager.Singleton.GetPurchasedShopItems(), // allItems // ); // } // Debug.Log($"Item {uniqueItemGuid} fully deleted locally and online."); // } // catch (Exception e) // { // Debug.LogError($"Failed to delete item {uniqueItemGuid}: {e.Message}"); // } //} ///// ///// Saves daily rewards data to Firebase. ///// //public async Task SaveDailyRewardsDataAsync(DailyRewardsData dailyData) //{ // try // { // if (user == null) return; // DocumentReference docRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("DailyRewards") // .Document("RewardData"); // Dictionary saveData = new Dictionary // { // { "firstClaimDate", Timestamp.FromDateTime(dailyData.firstClaimDate.ToUniversalTime()) }, // { "claimedRewards", dailyData.claimedRewards } // }; // await docRef.SetAsync(saveData); // } // catch (Exception e) // { // Debug.LogError($"Failed to save daily rewards data: {e.Message}"); // } //} ///// ///// Saves new player rewards data to Firebase. ///// //public async Task SaveNewPlayerRewardsDataAsync(NewPlayerRewardsData newPlayerData) //{ // try // { // if (user == null) return; // DocumentReference docRef = firestore // .Collection("Players") // .Document(user.UserId) // .Collection("NewPlayerRewards") // .Document("RewardData"); // Dictionary saveData = new Dictionary // { // { "accountCreationDate", Timestamp.FromDateTime(newPlayerData.accountCreationDate.ToUniversalTime()) }, // { "claimedRewards", newPlayerData.claimedRewards } // }; // await docRef.SetAsync(saveData); // } // catch (Exception e) // { // Debug.LogError($"Failed to save new player rewards data: {e.Message}"); // } //} } }