using JSMR.Infrastructure.Integrations.DLSite.Serialization;
using System.Text.Json.Serialization;

namespace JSMR.Infrastructure.Integrations.DLSite.Models;

public class ProductReview
{
    [JsonPropertyName("member_review_id")]
    public string? MemberReviewId { get; set; }

    [JsonPropertyName("workno")]
    public string? WorkNumber { get; set; }

    [JsonPropertyName("reviewer_id")]
    public string? ReviewerId { get; set; }

    [JsonPropertyName("status")]
    public string? Status { get; set; }

    [JsonPropertyName("recommend")]
    public string? Recommend { get; set; }

    [JsonPropertyName("spoiler")]
    public string? Spoiler { get; set; }

    [JsonPropertyName("review_title")]
    public string? ReviewTitle { get; set; }

    [JsonPropertyName("review_text")]
    public string? ReviewText { get; set; }

    [JsonPropertyName("entry_date")]
    [JsonConverter(typeof(DateTimeConverterUsingDateTimeParse))]
    public DateTime EntryDate { get; set; }

    [JsonPropertyName("regist_date")]
    [JsonConverter(typeof(DateTimeConverterUsingDateTimeParse))]
    public DateTime RegistrationDate { get; set; }

    [JsonPropertyName("good_review")]
    public string? GoodReview { get; set; }

    [JsonPropertyName("bad_review")]
    public string? BadReview { get; set; }

    [JsonPropertyName("circle_id")]
    public string? CircleId { get; set; }

    [JsonPropertyName("nick_name")]
    public string? Nickname { get; set; }

    [JsonPropertyName("popularity")]
    public string? Popularity { get; set; }

    [JsonPropertyName("rate")]
    public string? Rate { get; set; }

    [JsonPropertyName("circle_name")]
    public string? CircleName { get; set; }

    [JsonPropertyName("reviewer_status")]
    public string? ReviewerStatus { get; set; }

    [JsonPropertyName("is_purchased")]
    public string? IsPurchased { get; set; }

    [JsonPropertyName("pickup")]
    public bool Pickup { get; set; }

    [JsonPropertyName("rate_num")]
    public string? RateNumber { get; set; }

    [JsonPropertyName("reviewer_rank")]
    public string? ReviewerRank { get; set; }

    [JsonPropertyName("longtext")]
    public bool LongText { get; set; }

    [JsonPropertyName("genre")]
    public Dictionary<string, string> Genre { get; set; } = [];
}