using JSMR.Domain.Enums;

namespace JSMR.Application.VoiceWorks.Queries.Search;

public record VoiceWorkSearchResult
{
    public int VoiceWorkId { get; set; }
    public required string ProductId { get; set; }
    public string? OriginalProductId { get; set; }
    public string? Description { get; set; }
    public required string ProductName { get; set; }
    public required string ProductUrl { get; set; }
    public bool HasImage { get; set; }
    public required string Maker { get; set; }
    public required string MakerId { get; set; }
    public DateTime? ExpectedDate { get; set; }
    public DateTime? SalesDate { get; set; }
    public DateTime? PlannedReleaseDate { get; set; }
    public int? Downloads { get; set; }
    public int? WishlistCount { get; set; }
    public byte? StarRating { get; set; }
    public int? Votes { get; set; }
    public bool HasTrial { get; set; }
    public bool HasChobit { get; set; }
    public AgeRating Rating { get; set; }
    public bool Favorite { get; set; }
    public byte Status { get; set; }
    public byte SubtitleLanguage { get; set; }
    public bool? IsValid { get; set; }
    public required VoiceWorkCircleItem Circle { get; set; }
    public VoiceWorkCircleItem? OriginalCircle { get; set; }
    public VoiceWorkTagItem[] Tags { get; set; } = [];
    public VoiceWorkCreatorItem[] Creators { get; set; } = [];
    public string[] SupportedLanguages { get; set; } = [];
}

public class VoiceWorkCircleItem
{
    public required string Name { get; init; }
    public required string MakerId { get; init; }
    public bool IsFavorite { get; init; }
    public bool IsBlacklisted { get; init; }
}

public class VoiceWorkTagItem
{
    public int TagId { get; set; }
    public required string Name { get; set; }
    public bool IsFavorite { get; set; }
    public bool IsBlacklisted { get; set; }
}

public class VoiceWorkCreatorItem
{
    public int CreatorId { get; set; }
    public required string Name { get; set; }
    public bool IsFavorite { get; set; }
    public bool IsBlacklisted { get; set; }
}