using JSMR.Infrastructure.Integrations.DLSite.Serialization; using System.Text.Json.Serialization; namespace JSMR.Infrastructure.Integrations.DLSite.Models; public class ProductInfo { [JsonPropertyName("site_id")] public string? SiteId { get; set; } [JsonPropertyName("site_id_touch")] public string? SiteIdTouch { get; set; } [JsonPropertyName("maker_id")] public string? MakerId { get; set; } [JsonPropertyName("age_category")] public int AgeCategory { get; set; } [JsonPropertyName("affiliate_deny")] public int AffiliateDeny { get; set; } [JsonPropertyName("dl_count")] [JsonConverter(typeof(NumberConverter))] public int DownloadCount { get; set; } // This value can be a number or "false" [JsonPropertyName("wishlist_count")] [JsonConverter(typeof(NumberConverter))] public int WishlistCount { get; set; } [JsonPropertyName("dl_format")] public int DownloadFormat { get; set; } [JsonPropertyName("rank")] public ProductRank[] Rank { get; set; } = []; [JsonPropertyName("rate_average")] public int? RateAverage { get; set; } [JsonPropertyName("rate_average_2dp")] public decimal? RateAverage2DP { get; set; } [JsonPropertyName("rate_average_star")] public int? RateAverageStar { get; set; } [JsonPropertyName("rate_count")] public int? RateCount { get; set; } [JsonPropertyName("rate_count_detail")] public ProductRateCountDetail[] RateCountDetail { get; set; } = []; [JsonPropertyName("review_count")] [JsonConverter(typeof(NumberConverter))] public int ReviewCount { get; set; } [JsonPropertyName("price")] public int? Price { get; set; } [JsonPropertyName("price_without_tax")] public int? PriceWithoutTax { get; set; } [JsonPropertyName("price_str")] public string? PriceString { get; set; } [JsonPropertyName("default_point_rate")] public int? DefaultPointRate { get; set; } [JsonPropertyName("default_point")] public int DefaultPoint { get; set; } [JsonPropertyName("product_point_rate")] public int? ProductPointRate { get; set; } [JsonPropertyName("dlsiteplay_work")] public bool DLSitePlayWork { get; set; } [JsonPropertyName("is_sale")] public bool IsSale { get; set; } [JsonPropertyName("on_sale")] public int OnSale { get; set; } [JsonPropertyName("is_discount")] public bool IsDiscount { get; set; } [JsonPropertyName("is_pointup")] public bool IsPointUp { get; set; } //[JsonPropertyName("gift")] //[JsonConverter(typeof(ListConverter))] //public List Gift { get; set; } [JsonPropertyName("is_rental")] public bool IsRental { get; set; } [JsonPropertyName("work_rentals")] public string[] WorkRentals { get; set; } = []; [JsonPropertyName("upgrade_min_price")] public int UpgradeMinPrice { get; set; } [JsonPropertyName("down_url")] public string? DownloadURL { get; set; } [JsonPropertyName("is_tartget")] public string? IsTargetGet { get; set; } [JsonPropertyName("title_id")] public string? TitleId { get; set; } [JsonPropertyName("title_name")] public string? TitleName { get; set; } [JsonPropertyName("title_volumn")] public int? TitleVolumeNumber { get; set; } [JsonPropertyName("title_work_count")] public int? TitleWorkCount { get; set; } [JsonPropertyName("is_title_completed")] public bool IsTitleCompleted { get; set; } [JsonPropertyName("bulkbuy_key")] public string? BulkBuyKey { get; set; } [JsonPropertyName("bonuses")] public ProductBonus[] Bonuses { get; set; } = []; [JsonPropertyName("is_limit_work")] public bool IsLimitWork { get; set; } [JsonPropertyName("is_sold_out")] public bool IsSoldOut { get; set; } [JsonPropertyName("limit_stock")] public int LimitStock { get; set; } [JsonPropertyName("is_reserve_work")] public bool IsReserveWork { get; set; } [JsonPropertyName("is_reservable")] public bool IsReservable { get; set; } [JsonPropertyName("is_timesale")] public bool IsTimeSale { get; set; } [JsonPropertyName("timesale_stock")] public int TimeSaleStock { get; set; } [JsonPropertyName("is_free")] public bool IsFree { get; set; } [JsonPropertyName("is_oly")] public bool IsOLY { get; set; } [JsonPropertyName("is_led")] public bool IsLED { get; set; } [JsonPropertyName("is_wcc")] public bool IsWCC { get; set; } [JsonPropertyName("translation_info")] public ProductTranslationInfo? TranslationInfo { get; set; } [JsonPropertyName("work_name")] public string? WorkName { get; set; } [JsonPropertyName("work_image")] public string? WorkImage { get; set; } [JsonPropertyName("sales_end_info")] public string? SalesEndInfo { get; set; } [JsonPropertyName("voice_pack")] public string? VoicePack { get; set; } [JsonPropertyName("regist_date")] [JsonConverter(typeof(NullableDateTimeConverterUsingDateTimeParse))] public DateTime? RegistrationDate { get; set; } [JsonPropertyName("locale_price")] [JsonConverter(typeof(DictionaryConverter))] public Dictionary LocalePrice { get; set; } = []; [JsonPropertyName("locale_price_str")] [JsonConverter(typeof(DictionaryConverter))] public Dictionary LocalePriceString { get; set; } = []; [JsonPropertyName("work_type")] public string? WorkType { get; set; } [JsonPropertyName("book_type")] public string? BookType { get; set; } [JsonPropertyName("is_pack_work")] public bool IsPackWork { get; set; } [JsonPropertyName("limited_free_terms")] public string[] LimitedFreeTerms { get; set; } = []; [JsonPropertyName("dl_count_total")] public int DownloadCountTotal { get; set; } [JsonPropertyName("dl_count_items")] public DownloadCountItem[] DownloadCountItems { get; set; } = []; [JsonPropertyName("discount_rate")] public int? DiscountRate { get; set; } [JsonPropertyName("official_price")] public int? OfficialPrice { get; set; } // Don't know the type for sure [JsonPropertyName("campaign_id")] public string? CampaignId { get; set; } [JsonPropertyName("official_price_str")] public string? OfficialPriceString { get; set; } [JsonPropertyName("locale_official_price")] [JsonConverter(typeof(DictionaryConverter))] public Dictionary LocaleOfficialPrice { get; set; } = []; [JsonPropertyName("locale_official_price_str")] [JsonConverter(typeof(DictionaryConverter))] public Dictionary LocaleOfficialPriceString { get; set; } = []; // TODO: Convert to date [JsonPropertyName("discount_end_date")] public string? DiscountEndDate { get; set; } [JsonPropertyName("discount_to")] public string? DiscountTo { get; set; } [JsonPropertyName("discount_caption")] public string? DiscountCaption { get; set; } [JsonPropertyName("default_point_str")] public string? DefaultPointString { get; set; } [JsonPropertyName("options")] [JsonConverter(typeof(ProductInfoOptionsConverter))] public string[] Options { get; set; } = []; }