namespace Tiger.Game.Habbos; public class Habbo { public virtual int Id { get; set; } public virtual string Username { get; set; } = null!; public virtual string Email { get; set; } = null!; public virtual DateTime AccountCreated { get; set; } public virtual DateTime? LastLogin { get; set; } public virtual string Motto { get; set; } = null!; public virtual string Figure { get; set; } = null!; public virtual string Gender { get; set; } = null!; public virtual int Rank { get; set; } public virtual int Credits { get; set; } public virtual bool Online { get; set; } public virtual int HomeRoom { get; set; } public virtual int AchievementScore { get; set; } public virtual int? GroupId { get; set; } public virtual string? SsoTicket { get; set; } public virtual IDictionary Activitypoints { get; set; } = new Dictionary(); public virtual ICollection Badges { get; set; } = new List(); public virtual IDictionary Achievements { get; set; } = new Dictionary(); public virtual ICollection Subscriptions { get; set; } = new List(); public virtual int GetActivityPoints(int type) { return Activitypoints.TryGetValue(type, out var activityPoints) ? activityPoints.Amount : 0; } public virtual void UpdateCurrency(int type, int amount) { if (!Activitypoints.ContainsKey(type)) { Activitypoints.Add(type, new Activitypoints { Habbo = this, Amount = amount, Type = type }); return; } Activitypoints[type].Amount += amount; } public virtual HabboSubscription? GetActiveSubscription() { return Subscriptions.Where(s => s.Expires > DateTime.Now).MaxBy(s => s.Expires); } public virtual int GetPastSubscriptionDays() { int totalDays = 0; foreach (var subscription in Subscriptions) { if(subscription.Expires < DateTime.Now) // If subscription has ended { totalDays += (subscription.Expires - subscription.Started).Days; } else if(subscription.Started < DateTime.Now) // If subscription is ongoing { totalDays += (DateTime.Now - subscription.Started).Days; } } return totalDays; } }