//using System; //using System.Collections.Generic; //using System.Threading.Tasks; //using Supabase; //using Postgrest; //using Postgrest.Attributes; //using Postgrest.Models; //#region Model //[Table("players")] //public class PlayerRow : BaseModel //{ // //[PrimaryKey("wallet_address", false)] // //[Column("wallet_address")] // //public string WalletAddress { get; set; } // //[Column("total_kills")] // //public int TotalKills { get; set; } // //[Column("average_placement")] // //public decimal? AveragePlacement { get; set; } // //[Column("win_percentage")] // //public decimal? WinPercentage { get; set; } // //[Column("in_game_currency")] // //public long InGameCurrency { get; set; } // //[Column("purchased_items")] // //public Dictionary PurchasedItems { get; set; } = new(); // //[Column("updated_at")] // //public DateTimeOffset? UpdatedAt { get; set; } //} //#endregion ////public static class SupabasePlayers ////{ //// // TODO: set these //// public static string SupabaseUrl = "https://YOUR-PROJECT.supabase.co"; //// public static string SupabaseAnonKey = "YOUR-ANON-KEY"; //// private static Client _client; //// public static async Task InitAsync() //// { //// if (_client != null) return; //// var options = new SupabaseOptions //// { //// AutoConnectRealtime = false, //// Schema = "public" //// }; //// _client = new Client(SupabaseUrl, SupabaseAnonKey, options); //// await _client.InitializeAsync(); //// } //// // ---------- CREATE (or get existing via UPSERT on PK) ---------- //// public static async Task CreateIfMissingAsync( //// string walletAddress, //// int totalKills = 0, //// decimal? averagePlacement = null, //// decimal? winPercentage = null, //// long inGameCurrency = 0, //// Dictionary purchasedItems = null) //// { //// await InitAsync(); //// var row = new PlayerRow //// { //// WalletAddress = walletAddress, //// TotalKills = totalKills, //// AveragePlacement = averagePlacement, //// WinPercentage = winPercentage, //// InGameCurrency = inGameCurrency, //// PurchasedItems = purchasedItems ?? new Dictionary(), //// UpdatedAt = DateTimeOffset.UtcNow //// }; //// var resp = await _client //// .From() //// .Upsert(row); // upsert by PK //// return resp.Models.Count > 0 ? resp.Models[0] : row; //// } //// // ---------- READ ---------- //// public static async Task GetAsync(string walletAddress) //// { //// await InitAsync(); //// var resp = await _client //// .From() //// .Select("*") // 3.5.x requires a string //// .Filter("wallet_address", Postgrest.Constants.Operator.Equals, walletAddress) //// .Get(); //// return resp.Models.Count > 0 ? resp.Models[0] : null; //// } //// // ---------- PATCH ---------- //// public static async Task PatchAsync( //// string walletAddress, //// int? totalKills = null, //// decimal? averagePlacement = null, //// decimal? winPercentage = null, //// long? inGameCurrency = null, //// Dictionary purchasedItems = null) //// { //// await InitAsync(); //// var updateResp = await _client //// .From() //// .Filter("wallet_address", Postgrest.Constants.Operator.Equals, walletAddress) //// .Set(p => //// { //// var dict = new Dictionary(); //// if (totalKills.HasValue) dict["total_kills"] = totalKills.Value; //// if (averagePlacement.HasValue) dict["average_placement"] = averagePlacement.Value; //// if (winPercentage.HasValue) dict["win_percentage"] = winPercentage.Value; //// if (inGameCurrency.HasValue) dict["in_game_currency"] = inGameCurrency.Value; //// if (purchasedItems != null) dict["purchased_items"] = purchasedItems; //// dict["updated_at"] = DateTimeOffset.UtcNow; //// return dict; //// }) //// .Update(); //// return updateResp.Models.Count > 0 //// ? updateResp.Models[0] //// : await GetAsync(walletAddress); //// } //// // ---------- REPLACE (full row) ---------- //// public static async Task ReplaceAsync(PlayerRow fullRow) //// { //// await InitAsync(); //// if (string.IsNullOrWhiteSpace(fullRow.WalletAddress)) //// throw new ArgumentException("WalletAddress (PK) is required."); //// fullRow.UpdatedAt = DateTimeOffset.UtcNow; //// var resp = await _client //// .From() //// .Upsert(fullRow); // upsert by PK //// return resp.Models.Count > 0 ? resp.Models[0] : fullRow; //// } //// // ---------- DELETE ---------- //// public static async Task DeleteAsync(string walletAddress) //// { //// await InitAsync(); //// await _client //// .From() //// .Filter("wallet_address", Postgrest.Constants.Operator.Equals, walletAddress) //// .Delete(); //// return true; // PostgREST usually returns empty body on delete //// } ////}