using LiteCqrs;
using TeleWave.Application.Common.Models;
using TeleWave.Domain.Library;

namespace TeleWave.Application.Library.BulkTagShows;

/// <summary>
/// Проставляет жанры и/или возрастной рейтинг сразу нескольким шоу. Оба поля необязательны и
/// применяются независимо: обычно правят что-то одно, а связывать их в одну форму значило бы
/// заставлять переставлять второе «как было».
/// </summary>
/// <param name="GenreIds">
/// Что делать с жанрами: null — не трогать. Иначе <paramref name="ReplaceGenres"/> решает, заменить
/// набор целиком или дописать к имеющимся.
/// </param>
/// <param name="ReplaceGenres">
/// true — заменить набор жанров переданным; false — дописать. Дописывание нужно чаще: у шоу уже
/// есть жанры из метаданных, и разметка «это ещё и детское» не должна их стирать.
/// </param>
/// <param name="Audience">Рейтинг: null со <paramref name="SetAudience"/> = true снимает проставленный.</param>
/// <param name="SetAudience">Трогать ли рейтинг вообще.</param>
public sealed record BulkTagShowsCommand(
    IReadOnlyList<Guid> ShowIds,
    IReadOnlyList<Guid>? GenreIds = null,
    bool ReplaceGenres = false,
    ShowAudience? Audience = null,
    bool SetAudience = false
) : ICommand<Result<int>>;
