namespace TeleWave.Domain.Library;

/// <summary>
/// Жанр, проставленный шоу. Ровно один из жанров шоу — основной (<see cref="IsPrimary"/>): он
/// показывается в списках, остальные участвуют в фильтрах наравне с ним. Инвариант «основной ровно
/// один» держит агрегат <see cref="Show.SetGenres"/>.
/// </summary>
public class ShowGenre
{
    public Guid ShowId { get; private set; }
    public Guid GenreId { get; private set; }
    public bool IsPrimary { get; private set; }

    private ShowGenre() { }

    internal static ShowGenre Create(Guid showId, Guid genreId, bool isPrimary) =>
        new()
        {
            ShowId = showId,
            GenreId = genreId,
            IsPrimary = isPrimary,
        };
}
