using JSMR.Application.Enums;
using JSMR.Domain.Enums;

namespace JSMR.Application.VoiceWorks.Queries.Search;

public class VoiceWorkSearchCriteria
{
    public string? Keywords { get; init; }
    public string? Title { get; init; }
    public string? Circle { get; init; }
    public VoiceWorkStatus? Status { get; init; }
    public SaleStatus? SaleStatus { get; init; }
    public CircleStatus? CircleStatus { get; init; }
    public TagStatus? TagStatus { get; init; }
    public CreatorStatus? CreatorStatus { get; init; }
    public int[] TagIds { get; init; } = [];
    public bool IncludeAllTags { get; init; }
    public int[] CreatorIds { get; init; } = [];
    public bool IncludeAllCreators { get; init; }
    public Locale Locale { get; init; } = Locale.Japanese;
    public DateOnly? ScheduledReleaseDateStart { get; init; }
    public DateOnly? ScheduledReleaseDateEnd { get; init; }
    public DateOnly? ReleaseDateStart { get; init; }
    public DateOnly? ReleaseDateEnd { get; init; }
    public AgeRating[] AgeRatings { get; init; } = [];
    public Language[] SupportedLanguages { get; init; } = [];
    public AIGeneration[] AIGenerationOptions { get; init; } = [];
    public bool ShowFavoriteVoiceWorks { get; init; }
    public bool ShowInvalidVoiceWorks { get; init; }
    public int? MinDownloads { get; init; }
    public int? MaxDownloads { get; init; }
}