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

namespace OF_DL.Models.Dtos.Messages;

public class FromUserDto
{
    [JsonProperty("_view")] public string ViewRaw { get; set; } = "";

    [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("subscriptionBundles")] public List<object> SubscriptionBundles { get; set; } = [];

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

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

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

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

    [JsonProperty("subscribedBy")] public object SubscribedBy { get; set; } = new();

    [JsonProperty("subscribedByExpire")] public object SubscribedByExpire { get; set; } = new();

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

    [JsonProperty("subscribedByAutoprolong")]
    public object SubscribedByAutoprolong { get; set; } = new();

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

    [JsonProperty("currentSubscribePrice")]
    public object CurrentSubscribePrice { get; set; } = new();

    [JsonProperty("subscribedOn")] public object SubscribedOn { get; set; } = new();

    [JsonProperty("subscribedOnExpiredNow")]
    public object SubscribedOnExpiredNow { get; set; } = new();

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

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

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

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