namespace Domain.Entities.Members
{
    public class MemberStats
    {
        public virtual Member Member { get; private set; } = null!;

        public byte[] RowVersion { get; set; } = Array.Empty<byte>();

        public int MemberID { get; set; }

        public long Exp { get; set; } = 0;

        public long PostCount { get; set; } = 0;

        public long CommentCount { get; set; } = 0;

        public long LikeReceivedCount { get; set; } = 0;

        public long LikeGivenCount { get; set; } = 0;

        public long ReportedCount { get; set; } = 0;

        public long BookmarkGivenCount { get; set; } = 0;

        public int WarningCount { get; set; } = 0;

        public int SuspensionCount { get; set; } = 0;

        public long LoginCount { get; set; } = 0;

        public long AttendanceCount { get; set; } = 0;

        public long FollowingCount { get; set; } = 0;

        public long FollowerCount { get; set; } = 0;

        public long PaymentCount { get; set; } = 0;

        public long TotalPaidAmount { get; set; } = 0;

        public long TotalCanceledAmount { get; set; } = 0;

        private MemberStats() { }

        private MemberStats(int memberID)
        {
            if (memberID <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(memberID));
            }

            MemberID = memberID;
        }

        public static MemberStats Create(int memberID)
        {
            return new(memberID);
        }
    }
}