using System.Text.Json.Serialization;

namespace TeleWave.Domain.Library;

/// <summary>
/// Возрастной рейтинг шоу по шкале MPAA — той самой, что отдают внешние источники, поэтому значение
/// из метаданных ложится сюда без выдуманной промежуточной классификации.
///
/// Значения упорядочены по возрастанию строгости, и на этом порядке держится весь отбор кандидатов
/// («до 23:00 не строже <see cref="Pg13"/>» — это обычное сравнение). Новые значения можно вставлять
/// только с сохранением монотонности и с миграцией данных.
///
/// Отсутствие рейтинга — это <c>null</c>, а не значение шкалы: «не проставлено» и «подходит всем» —
/// разные факты, и загонять их в одну ячейку значит терять оба.
///
/// Это не гейт для зрителя: что показывает канал, то и смотрится. Рейтинг нужен планировщику,
/// чтобы не поставить взрослое в детский эфир.
///
/// Имена на проводе заданы явно (<c>PG-13</c>, а не <c>Pg13</c>): по ним же приходят данные
/// источников, и совпадение написания избавляет от таблицы перевода на каждой границе.
/// </summary>
public enum ShowAudience
{
    /// <summary>General Audiences — без ограничений.</summary>
    [JsonStringEnumMemberName("G")]
    G = 0,

    /// <summary>Parental Guidance Suggested — рекомендуется присутствие родителей.</summary>
    [JsonStringEnumMemberName("PG")]
    Pg = 1,

    /// <summary>Parents Strongly Cautioned — не рекомендуется детям до 13 лет.</summary>
    [JsonStringEnumMemberName("PG-13")]
    Pg13 = 2,

    /// <summary>Restricted — до 17 лет в сопровождении взрослого.</summary>
    [JsonStringEnumMemberName("R")]
    R = 3,

    /// <summary>No One 17 and Under Admitted — только для взрослых.</summary>
    [JsonStringEnumMemberName("NC-17")]
    Nc17 = 4,
}
