using Newtonsoft.Json;
using OF_DL.Models.Dtos.Common;

namespace OF_DL.Models.Dtos.Users;

public class UserDto
{
    [JsonProperty("view")] public string View { get; set; } = "";

    [JsonProperty("avatar")] public string? Avatar { get; set; }

    [JsonProperty("avatarThumbs")] public AvatarThumbsDto AvatarThumbs { get; set; } = new();

    [JsonProperty("header")] public string? Header { get; set; }

    [JsonProperty("headerSize")] public HeaderSizeDto HeaderSize { get; set; } = new();

    [JsonProperty("headerThumbs")] public HeaderThumbsDto HeaderThumbs { get; set; } = new();

    [JsonProperty("id")] public long? Id { get; set; }

    [JsonProperty("name")] public string? Name { get; set; }

    [JsonProperty("username")] public string? Username { get; set; }

    [JsonProperty("canLookStory")] public bool? CanLookStory { get; set; }

    [JsonProperty("canCommentStory")] public bool? CanCommentStory { get; set; }

    [JsonProperty("hasNotViewedStory")] public bool? HasNotViewedStory { get; set; }

    [JsonProperty("isVerified")] public bool? IsVerified { get; set; }

    [JsonProperty("canPayInternal")] public bool? CanPayInternal { get; set; }

    [JsonProperty("hasScheduledStream")] public bool? HasScheduledStream { get; set; }

    [JsonProperty("hasStream")] public bool? HasStream { get; set; }

    [JsonProperty("hasStories")] public bool? HasStories { get; set; }

    [JsonProperty("tipsEnabled")] public bool? TipsEnabled { get; set; }

    [JsonProperty("tipsTextEnabled")] public bool? TipsTextEnabled { get; set; }

    [JsonProperty("tipsMin")] public int? TipsMin { get; set; }

    [JsonProperty("tipsMinInternal")] public int? TipsMinInternal { get; set; }

    [JsonProperty("tipsMax")] public int? TipsMax { get; set; }

    [JsonProperty("canEarn")] public bool? CanEarn { get; set; }

    [JsonProperty("canAddSubscriber")] public bool? CanAddSubscriber { get; set; }

    [JsonProperty("subscribePrice")] public string? SubscribePrice { get; set; }

    [JsonProperty("displayName")] public string DisplayName { get; set; } = "";

    [JsonProperty("notice")] public string Notice { get; set; } = "";

    [JsonProperty("isPaywallRequired")] public bool? IsPaywallRequired { get; set; }

    [JsonProperty("unprofitable")] public bool? Unprofitable { get; set; }

    [JsonProperty("listsStates")] public List<ListsStateDto> ListsStates { get; set; } = [];

    [JsonProperty("isMuted")] public bool? IsMuted { get; set; }

    [JsonProperty("isRestricted")] public bool? IsRestricted { get; set; }

    [JsonProperty("canRestrict")] public bool? CanRestrict { get; set; }

    [JsonProperty("subscribedBy")] public bool? SubscribedBy { get; set; }

    [JsonProperty("subscribedByExpire")] public bool? SubscribedByExpire { get; set; }

    [JsonProperty("subscribedByExpireDate")] public DateTime? SubscribedByExpireDate { get; set; }

    [JsonProperty("subscribedByAutoprolong")] public bool? SubscribedByAutoprolong { get; set; }

    [JsonProperty("subscribedIsExpiredNow")] public bool? SubscribedIsExpiredNow { get; set; }

    [JsonProperty("currentSubscribePrice")] public string? CurrentSubscribePrice { get; set; }

    [JsonProperty("subscribedOn")] public bool? SubscribedOn { get; set; }

    [JsonProperty("subscribedOnExpiredNow")] public bool? SubscribedOnExpiredNow { get; set; }

    [JsonProperty("subscribedOnDuration")] public string SubscribedOnDuration { get; set; } = "";

    [JsonProperty("joinDate")] public DateTime? JoinDate { get; set; }

    [JsonProperty("isReferrerAllowed")] public bool? IsReferrerAllowed { get; set; }

    [JsonProperty("about")] public string About { get; set; } = "";

    [JsonProperty("rawAbout")] public string RawAbout { get; set; } = "";

    [JsonProperty("website")] public object Website { get; set; } = new();

    [JsonProperty("wishlist")] public object Wishlist { get; set; } = new();

    [JsonProperty("location")] public object Location { get; set; } = new();

    [JsonProperty("postsCount")] public int? PostsCount { get; set; }

    [JsonProperty("archivedPostsCount")] public int? ArchivedPostsCount { get; set; }

    [JsonProperty("privateArchivedPostsCount")] public int? PrivateArchivedPostsCount { get; set; }

    [JsonProperty("photosCount")] public int? PhotosCount { get; set; }

    [JsonProperty("videosCount")] public int? VideosCount { get; set; }

    [JsonProperty("audiosCount")] public int? AudiosCount { get; set; }

    [JsonProperty("mediasCount")] public int? MediasCount { get; set; }

    [JsonProperty("lastSeen")] public DateTime? LastSeen { get; set; }

    [JsonProperty("favoritesCount")] public int? FavoritesCount { get; set; }

    [JsonProperty("favoritedCount")] public int? FavoritedCount { get; set; }

    [JsonProperty("showPostsInFeed")] public bool? ShowPostsInFeed { get; set; }

    [JsonProperty("canReceiveChatMessage")] public bool? CanReceiveChatMessage { get; set; }

    [JsonProperty("isPerformer")] public bool? IsPerformer { get; set; }

    [JsonProperty("isRealPerformer")] public bool? IsRealPerformer { get; set; }

    [JsonProperty("isSpotifyConnected")] public bool? IsSpotifyConnected { get; set; }

    [JsonProperty("subscribersCount")] public int? SubscribersCount { get; set; }

    [JsonProperty("hasPinnedPosts")] public bool? HasPinnedPosts { get; set; }

    [JsonProperty("hasLabels")] public bool? HasLabels { get; set; }

    [JsonProperty("canChat")] public bool? CanChat { get; set; }

    [JsonProperty("callPrice")] public string? CallPrice { get; set; }

    [JsonProperty("isPrivateRestriction")] public bool? IsPrivateRestriction { get; set; }

    [JsonProperty("showSubscribersCount")] public bool? ShowSubscribersCount { get; set; }

    [JsonProperty("showMediaCount")] public bool? ShowMediaCount { get; set; }

    [JsonProperty("subscribedByData")] public SubscribedByDataDto SubscribedByData { get; set; } = new();

    [JsonProperty("subscribedOnData")] public SubscribedOnDataDto SubscribedOnData { get; set; } = new();

    [JsonProperty("canPromotion")] public bool? CanPromotion { get; set; }

    [JsonProperty("canCreatePromotion")] public bool? CanCreatePromotion { get; set; }

    [JsonProperty("canCreateTrial")] public bool? CanCreateTrial { get; set; }

    [JsonProperty("isAdultContent")] public bool? IsAdultContent { get; set; }

    [JsonProperty("canTrialSend")] public bool? CanTrialSend { get; set; }

    [JsonProperty("hadEnoughLastPhotos")] public bool? HadEnoughLastPhotos { get; set; }

    [JsonProperty("hasLinks")] public bool? HasLinks { get; set; }

    [JsonProperty("firstPublishedPostDate")] public DateTime? FirstPublishedPostDate { get; set; }

    [JsonProperty("isSpringConnected")] public bool? IsSpringConnected { get; set; }

    [JsonProperty("isFriend")] public bool? IsFriend { get; set; }

    [JsonProperty("isBlocked")] public bool? IsBlocked { get; set; }

    [JsonProperty("canReport")] public bool? CanReport { get; set; }
}
