using System.Collections.ObjectModel;
using System.Text.Json.Serialization;
namespace Jellyfin.Plugin.JRay.Models;
///
/// One shareable actor timeline for one cut of one title, as the public server
/// serves it. See the server specification §2.
///
///
/// This is the exchange envelope, versioned by jmanifest_version
/// and deliberately separate from the truth file's schema_version: a
/// change to how manifests are transported need not force a truth-file bump.
/// They currently coincide at 2 only because the SR-003 bump touched both.
///
/// A manifest is never trusted merely because a server served it (JR-027). Every
/// field below is re-validated on receipt against the same rules the server
/// applies on upload.
///
///
// TRACES: JR-025, JR-027 | SR-003
public class Jmanifest
{
/// Gets or sets the exchange envelope version this manifest speaks.
[JsonPropertyName("jmanifest_version")]
public int JmanifestVersion { get; set; }
/// Gets or sets what the work is — TMDB/IMDB ids and episode coordinates.
[JsonPropertyName("identity")]
public JmanifestIdentity? Identity { get; set; }
/// Gets or sets which encode the timings apply to.
[JsonPropertyName("cut")]
public JmanifestCut? Cut { get; set; }
/// Gets or sets extraction provenance.
[JsonPropertyName("extraction")]
public JmanifestExtraction? Extraction { get; set; }
/// Gets the actors and their presence windows.
[JsonPropertyName("actors")]
[JsonObjectCreationHandling(JsonObjectCreationHandling.Populate)]
public Collection Actors { get; } = new();
}