/* 
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

package dev.plexapi.sdk.models.operations;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import dev.plexapi.sdk.utils.Utils;
import java.lang.Double;
import java.lang.Float;
import java.lang.Integer;
import java.lang.Long;
import java.lang.Override;
import java.lang.String;
import java.lang.SuppressWarnings;
import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

/**
 * GetAllMediaLibraryMetadata - Unknown
 * 
 */

public class GetAllMediaLibraryMetadata {

    /**
     * The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API.
     */
    @JsonProperty("ratingKey")
    private String ratingKey;

    /**
     * The unique key for the media item.
     */
    @JsonProperty("key")
    private String key;

    /**
     * The globally unique identifier for the media item.
     */
    @JsonProperty("guid")
    private String guid;

    /**
     * A URL‐friendly version of the media title.
     */
    @JsonProperty("slug")
    private String slug;

    /**
     * The studio that produced the media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("studio")
    private Optional<String> studio;

    @JsonProperty("type")
    private GetAllMediaLibraryLibraryType type;

    /**
     * The title of the media item.
     */
    @JsonProperty("title")
    private String title;

    /**
     * The sort title used for ordering media items.
     */
    @JsonProperty("titleSort")
    private String titleSort;

    /**
     * The content rating for the media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("contentRating")
    private Optional<String> contentRating;

    /**
     * A synopsis of the media item.
     */
    @JsonProperty("summary")
    private String summary;

    /**
     * The critic rating for the media item.
     */
    @JsonProperty("rating")
    private float rating;

    /**
     * The audience rating for the media item.
     */
    @JsonProperty("audienceRating")
    private double audienceRating;

    /**
     * The release year of the media item.
     */
    @JsonProperty("year")
    private int year;

    /**
     * A brief tagline for the media item.
     */
    @JsonProperty("tagline")
    private String tagline;

    /**
     * The thumbnail image URL for the media item.
     */
    @JsonProperty("thumb")
    private String thumb;

    /**
     * The art image URL for the media item.
     */
    @JsonProperty("art")
    private String art;

    /**
     * The theme URL for the media item.
     */
    @JsonProperty("theme")
    private String theme;

    /**
     * The index position of the media item.
     */
    @JsonProperty("index")
    private int index;

    /**
     * The number of leaf items (end nodes) under this media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("leafCount")
    private Optional<Integer> leafCount;

    /**
     * The number of leaf items that have been viewed.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("viewedLeafCount")
    private Optional<Integer> viewedLeafCount;

    /**
     * The number of child items associated with this media item.
     */
    @JsonProperty("childCount")
    private int childCount;

    /**
     * The total number of seasons (for TV shows).
     */
    @JsonProperty("seasonCount")
    private int seasonCount;

    /**
     * The duration of the media item in milliseconds.
     */
    @JsonProperty("duration")
    private int duration;

    /**
     * The original release date of the media item.
     */
    @JsonProperty("originallyAvailableAt")
    private LocalDate originallyAvailableAt;

    @JsonProperty("addedAt")
    private long addedAt;

    /**
     * Unix epoch datetime in seconds
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("updatedAt")
    private Optional<Long> updatedAt;

    /**
     * The URL for the audience rating image.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("audienceRatingImage")
    private Optional<String> audienceRatingImage;

    /**
     * The source from which chapter data is derived.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("chapterSource")
    private Optional<String> chapterSource;

    /**
     * The primary extra key associated with this media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("primaryExtraKey")
    private Optional<String> primaryExtraKey;

    /**
     * The original title of the media item (if different).
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("originalTitle")
    private Optional<String> originalTitle;

    /**
     * The rating key of the parent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("parentRatingKey")
    private Optional<String> parentRatingKey;

    /**
     * The rating key of the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentRatingKey")
    private Optional<String> grandparentRatingKey;

    /**
     * The GUID of the parent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("parentGuid")
    private Optional<String> parentGuid;

    /**
     * The GUID of the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentGuid")
    private Optional<String> grandparentGuid;

    /**
     * The slug for the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentSlug")
    private Optional<String> grandparentSlug;

    /**
     * The key of the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentKey")
    private Optional<String> grandparentKey;

    /**
     * The key of the parent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("parentKey")
    private Optional<String> parentKey;

    /**
     * The title of the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentTitle")
    private Optional<String> grandparentTitle;

    /**
     * The thumbnail URL for the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentThumb")
    private Optional<String> grandparentThumb;

    /**
     * The theme URL for the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentTheme")
    private Optional<String> grandparentTheme;

    /**
     * The art URL for the grandparent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("grandparentArt")
    private Optional<String> grandparentArt;

    /**
     * The title of the parent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("parentTitle")
    private Optional<String> parentTitle;

    /**
     * The index position of the parent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("parentIndex")
    private Optional<Integer> parentIndex;

    /**
     * The thumbnail URL for the parent media item.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("parentThumb")
    private Optional<String> parentThumb;

    /**
     * The URL for the rating image.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("ratingImage")
    private Optional<String> ratingImage;

    /**
     * The number of times this media item has been viewed.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("viewCount")
    private Optional<Integer> viewCount;

    /**
     * The current playback offset (in milliseconds).
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("viewOffset")
    private Optional<Integer> viewOffset;

    /**
     * The number of times this media item has been skipped.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("skipCount")
    private Optional<Integer> skipCount;

    /**
     * A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("subtype")
    private Optional<String> subtype;

    /**
     * The Unix timestamp representing the last time the item was rated.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("lastRatedAt")
    private Optional<Long> lastRatedAt;

    /**
     * The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available).
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("createdAtAccuracy")
    private Optional<String> createdAtAccuracy;

    /**
     * The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("createdAtTZOffset")
    private Optional<String> createdAtTZOffset;

    /**
     * Unix timestamp for when the media item was last viewed.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("lastViewedAt")
    private Optional<Integer> lastViewedAt;

    /**
     * The rating provided by a user for the item. This value is expressed as a decimal number.
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("userRating")
    private Optional<Float> userRating;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Image")
    private Optional<? extends List<GetAllMediaLibraryImage>> image;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("UltraBlurColors")
    private Optional<? extends GetAllMediaLibraryUltraBlurColors> ultraBlurColors;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Media")
    private Optional<? extends List<GetAllMediaLibraryMedia>> media;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Genre")
    private Optional<? extends List<GetAllMediaLibraryGenre>> genre;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Country")
    private Optional<? extends List<GetAllMediaLibraryCountry>> country;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Director")
    private Optional<? extends List<GetAllMediaLibraryDirector>> director;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Writer")
    private Optional<? extends List<GetAllMediaLibraryWriter>> writer;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Role")
    private Optional<? extends List<GetAllMediaLibraryRole>> role;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Guid")
    private Optional<? extends List<Guids>> guids;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Collection")
    private Optional<? extends List<GetAllMediaLibraryCollection>> collection;

    @JsonCreator
    public GetAllMediaLibraryMetadata(
            @JsonProperty("ratingKey") String ratingKey,
            @JsonProperty("key") String key,
            @JsonProperty("guid") String guid,
            @JsonProperty("slug") String slug,
            @JsonProperty("studio") Optional<String> studio,
            @JsonProperty("type") GetAllMediaLibraryLibraryType type,
            @JsonProperty("title") String title,
            @JsonProperty("titleSort") String titleSort,
            @JsonProperty("contentRating") Optional<String> contentRating,
            @JsonProperty("summary") String summary,
            @JsonProperty("rating") float rating,
            @JsonProperty("audienceRating") double audienceRating,
            @JsonProperty("year") int year,
            @JsonProperty("tagline") String tagline,
            @JsonProperty("thumb") String thumb,
            @JsonProperty("art") String art,
            @JsonProperty("theme") String theme,
            @JsonProperty("index") int index,
            @JsonProperty("leafCount") Optional<Integer> leafCount,
            @JsonProperty("viewedLeafCount") Optional<Integer> viewedLeafCount,
            @JsonProperty("childCount") int childCount,
            @JsonProperty("seasonCount") int seasonCount,
            @JsonProperty("duration") int duration,
            @JsonProperty("originallyAvailableAt") LocalDate originallyAvailableAt,
            @JsonProperty("addedAt") long addedAt,
            @JsonProperty("updatedAt") Optional<Long> updatedAt,
            @JsonProperty("audienceRatingImage") Optional<String> audienceRatingImage,
            @JsonProperty("chapterSource") Optional<String> chapterSource,
            @JsonProperty("primaryExtraKey") Optional<String> primaryExtraKey,
            @JsonProperty("originalTitle") Optional<String> originalTitle,
            @JsonProperty("parentRatingKey") Optional<String> parentRatingKey,
            @JsonProperty("grandparentRatingKey") Optional<String> grandparentRatingKey,
            @JsonProperty("parentGuid") Optional<String> parentGuid,
            @JsonProperty("grandparentGuid") Optional<String> grandparentGuid,
            @JsonProperty("grandparentSlug") Optional<String> grandparentSlug,
            @JsonProperty("grandparentKey") Optional<String> grandparentKey,
            @JsonProperty("parentKey") Optional<String> parentKey,
            @JsonProperty("grandparentTitle") Optional<String> grandparentTitle,
            @JsonProperty("grandparentThumb") Optional<String> grandparentThumb,
            @JsonProperty("grandparentTheme") Optional<String> grandparentTheme,
            @JsonProperty("grandparentArt") Optional<String> grandparentArt,
            @JsonProperty("parentTitle") Optional<String> parentTitle,
            @JsonProperty("parentIndex") Optional<Integer> parentIndex,
            @JsonProperty("parentThumb") Optional<String> parentThumb,
            @JsonProperty("ratingImage") Optional<String> ratingImage,
            @JsonProperty("viewCount") Optional<Integer> viewCount,
            @JsonProperty("viewOffset") Optional<Integer> viewOffset,
            @JsonProperty("skipCount") Optional<Integer> skipCount,
            @JsonProperty("subtype") Optional<String> subtype,
            @JsonProperty("lastRatedAt") Optional<Long> lastRatedAt,
            @JsonProperty("createdAtAccuracy") Optional<String> createdAtAccuracy,
            @JsonProperty("createdAtTZOffset") Optional<String> createdAtTZOffset,
            @JsonProperty("lastViewedAt") Optional<Integer> lastViewedAt,
            @JsonProperty("userRating") Optional<Float> userRating,
            @JsonProperty("Image") Optional<? extends List<GetAllMediaLibraryImage>> image,
            @JsonProperty("UltraBlurColors") Optional<? extends GetAllMediaLibraryUltraBlurColors> ultraBlurColors,
            @JsonProperty("Media") Optional<? extends List<GetAllMediaLibraryMedia>> media,
            @JsonProperty("Genre") Optional<? extends List<GetAllMediaLibraryGenre>> genre,
            @JsonProperty("Country") Optional<? extends List<GetAllMediaLibraryCountry>> country,
            @JsonProperty("Director") Optional<? extends List<GetAllMediaLibraryDirector>> director,
            @JsonProperty("Writer") Optional<? extends List<GetAllMediaLibraryWriter>> writer,
            @JsonProperty("Role") Optional<? extends List<GetAllMediaLibraryRole>> role,
            @JsonProperty("Guid") Optional<? extends List<Guids>> guids,
            @JsonProperty("Collection") Optional<? extends List<GetAllMediaLibraryCollection>> collection) {
        Utils.checkNotNull(ratingKey, "ratingKey");
        Utils.checkNotNull(key, "key");
        Utils.checkNotNull(guid, "guid");
        Utils.checkNotNull(slug, "slug");
        Utils.checkNotNull(studio, "studio");
        Utils.checkNotNull(type, "type");
        Utils.checkNotNull(title, "title");
        Utils.checkNotNull(titleSort, "titleSort");
        Utils.checkNotNull(contentRating, "contentRating");
        Utils.checkNotNull(summary, "summary");
        Utils.checkNotNull(rating, "rating");
        Utils.checkNotNull(audienceRating, "audienceRating");
        Utils.checkNotNull(year, "year");
        Utils.checkNotNull(tagline, "tagline");
        Utils.checkNotNull(thumb, "thumb");
        Utils.checkNotNull(art, "art");
        Utils.checkNotNull(theme, "theme");
        Utils.checkNotNull(index, "index");
        Utils.checkNotNull(leafCount, "leafCount");
        Utils.checkNotNull(viewedLeafCount, "viewedLeafCount");
        Utils.checkNotNull(childCount, "childCount");
        Utils.checkNotNull(seasonCount, "seasonCount");
        Utils.checkNotNull(duration, "duration");
        Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt");
        Utils.checkNotNull(addedAt, "addedAt");
        Utils.checkNotNull(updatedAt, "updatedAt");
        Utils.checkNotNull(audienceRatingImage, "audienceRatingImage");
        Utils.checkNotNull(chapterSource, "chapterSource");
        Utils.checkNotNull(primaryExtraKey, "primaryExtraKey");
        Utils.checkNotNull(originalTitle, "originalTitle");
        Utils.checkNotNull(parentRatingKey, "parentRatingKey");
        Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey");
        Utils.checkNotNull(parentGuid, "parentGuid");
        Utils.checkNotNull(grandparentGuid, "grandparentGuid");
        Utils.checkNotNull(grandparentSlug, "grandparentSlug");
        Utils.checkNotNull(grandparentKey, "grandparentKey");
        Utils.checkNotNull(parentKey, "parentKey");
        Utils.checkNotNull(grandparentTitle, "grandparentTitle");
        Utils.checkNotNull(grandparentThumb, "grandparentThumb");
        Utils.checkNotNull(grandparentTheme, "grandparentTheme");
        Utils.checkNotNull(grandparentArt, "grandparentArt");
        Utils.checkNotNull(parentTitle, "parentTitle");
        Utils.checkNotNull(parentIndex, "parentIndex");
        Utils.checkNotNull(parentThumb, "parentThumb");
        Utils.checkNotNull(ratingImage, "ratingImage");
        Utils.checkNotNull(viewCount, "viewCount");
        Utils.checkNotNull(viewOffset, "viewOffset");
        Utils.checkNotNull(skipCount, "skipCount");
        Utils.checkNotNull(subtype, "subtype");
        Utils.checkNotNull(lastRatedAt, "lastRatedAt");
        Utils.checkNotNull(createdAtAccuracy, "createdAtAccuracy");
        Utils.checkNotNull(createdAtTZOffset, "createdAtTZOffset");
        Utils.checkNotNull(lastViewedAt, "lastViewedAt");
        Utils.checkNotNull(userRating, "userRating");
        Utils.checkNotNull(image, "image");
        Utils.checkNotNull(ultraBlurColors, "ultraBlurColors");
        Utils.checkNotNull(media, "media");
        Utils.checkNotNull(genre, "genre");
        Utils.checkNotNull(country, "country");
        Utils.checkNotNull(director, "director");
        Utils.checkNotNull(writer, "writer");
        Utils.checkNotNull(role, "role");
        Utils.checkNotNull(guids, "guids");
        Utils.checkNotNull(collection, "collection");
        this.ratingKey = ratingKey;
        this.key = key;
        this.guid = guid;
        this.slug = slug;
        this.studio = studio;
        this.type = type;
        this.title = title;
        this.titleSort = titleSort;
        this.contentRating = contentRating;
        this.summary = summary;
        this.rating = rating;
        this.audienceRating = audienceRating;
        this.year = year;
        this.tagline = tagline;
        this.thumb = thumb;
        this.art = art;
        this.theme = theme;
        this.index = index;
        this.leafCount = leafCount;
        this.viewedLeafCount = viewedLeafCount;
        this.childCount = childCount;
        this.seasonCount = seasonCount;
        this.duration = duration;
        this.originallyAvailableAt = originallyAvailableAt;
        this.addedAt = addedAt;
        this.updatedAt = updatedAt;
        this.audienceRatingImage = audienceRatingImage;
        this.chapterSource = chapterSource;
        this.primaryExtraKey = primaryExtraKey;
        this.originalTitle = originalTitle;
        this.parentRatingKey = parentRatingKey;
        this.grandparentRatingKey = grandparentRatingKey;
        this.parentGuid = parentGuid;
        this.grandparentGuid = grandparentGuid;
        this.grandparentSlug = grandparentSlug;
        this.grandparentKey = grandparentKey;
        this.parentKey = parentKey;
        this.grandparentTitle = grandparentTitle;
        this.grandparentThumb = grandparentThumb;
        this.grandparentTheme = grandparentTheme;
        this.grandparentArt = grandparentArt;
        this.parentTitle = parentTitle;
        this.parentIndex = parentIndex;
        this.parentThumb = parentThumb;
        this.ratingImage = ratingImage;
        this.viewCount = viewCount;
        this.viewOffset = viewOffset;
        this.skipCount = skipCount;
        this.subtype = subtype;
        this.lastRatedAt = lastRatedAt;
        this.createdAtAccuracy = createdAtAccuracy;
        this.createdAtTZOffset = createdAtTZOffset;
        this.lastViewedAt = lastViewedAt;
        this.userRating = userRating;
        this.image = image;
        this.ultraBlurColors = ultraBlurColors;
        this.media = media;
        this.genre = genre;
        this.country = country;
        this.director = director;
        this.writer = writer;
        this.role = role;
        this.guids = guids;
        this.collection = collection;
    }
    
    public GetAllMediaLibraryMetadata(
            String ratingKey,
            String key,
            String guid,
            String slug,
            GetAllMediaLibraryLibraryType type,
            String title,
            String titleSort,
            String summary,
            float rating,
            double audienceRating,
            int year,
            String tagline,
            String thumb,
            String art,
            String theme,
            int index,
            int childCount,
            int seasonCount,
            int duration,
            LocalDate originallyAvailableAt,
            long addedAt) {
        this(ratingKey, key, guid, slug, Optional.empty(), type, title, titleSort, Optional.empty(), summary, rating, audienceRating, year, tagline, thumb, art, theme, index, Optional.empty(), Optional.empty(), childCount, seasonCount, duration, originallyAvailableAt, addedAt, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
    }

    /**
     * The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API.
     */
    @JsonIgnore
    public String ratingKey() {
        return ratingKey;
    }

    /**
     * The unique key for the media item.
     */
    @JsonIgnore
    public String key() {
        return key;
    }

    /**
     * The globally unique identifier for the media item.
     */
    @JsonIgnore
    public String guid() {
        return guid;
    }

    /**
     * A URL‐friendly version of the media title.
     */
    @JsonIgnore
    public String slug() {
        return slug;
    }

    /**
     * The studio that produced the media item.
     */
    @JsonIgnore
    public Optional<String> studio() {
        return studio;
    }

    @JsonIgnore
    public GetAllMediaLibraryLibraryType type() {
        return type;
    }

    /**
     * The title of the media item.
     */
    @JsonIgnore
    public String title() {
        return title;
    }

    /**
     * The sort title used for ordering media items.
     */
    @JsonIgnore
    public String titleSort() {
        return titleSort;
    }

    /**
     * The content rating for the media item.
     */
    @JsonIgnore
    public Optional<String> contentRating() {
        return contentRating;
    }

    /**
     * A synopsis of the media item.
     */
    @JsonIgnore
    public String summary() {
        return summary;
    }

    /**
     * The critic rating for the media item.
     */
    @JsonIgnore
    public float rating() {
        return rating;
    }

    /**
     * The audience rating for the media item.
     */
    @JsonIgnore
    public double audienceRating() {
        return audienceRating;
    }

    /**
     * The release year of the media item.
     */
    @JsonIgnore
    public int year() {
        return year;
    }

    /**
     * A brief tagline for the media item.
     */
    @JsonIgnore
    public String tagline() {
        return tagline;
    }

    /**
     * The thumbnail image URL for the media item.
     */
    @JsonIgnore
    public String thumb() {
        return thumb;
    }

    /**
     * The art image URL for the media item.
     */
    @JsonIgnore
    public String art() {
        return art;
    }

    /**
     * The theme URL for the media item.
     */
    @JsonIgnore
    public String theme() {
        return theme;
    }

    /**
     * The index position of the media item.
     */
    @JsonIgnore
    public int index() {
        return index;
    }

    /**
     * The number of leaf items (end nodes) under this media item.
     */
    @JsonIgnore
    public Optional<Integer> leafCount() {
        return leafCount;
    }

    /**
     * The number of leaf items that have been viewed.
     */
    @JsonIgnore
    public Optional<Integer> viewedLeafCount() {
        return viewedLeafCount;
    }

    /**
     * The number of child items associated with this media item.
     */
    @JsonIgnore
    public int childCount() {
        return childCount;
    }

    /**
     * The total number of seasons (for TV shows).
     */
    @JsonIgnore
    public int seasonCount() {
        return seasonCount;
    }

    /**
     * The duration of the media item in milliseconds.
     */
    @JsonIgnore
    public int duration() {
        return duration;
    }

    /**
     * The original release date of the media item.
     */
    @JsonIgnore
    public LocalDate originallyAvailableAt() {
        return originallyAvailableAt;
    }

    @JsonIgnore
    public long addedAt() {
        return addedAt;
    }

    /**
     * Unix epoch datetime in seconds
     */
    @JsonIgnore
    public Optional<Long> updatedAt() {
        return updatedAt;
    }

    /**
     * The URL for the audience rating image.
     */
    @JsonIgnore
    public Optional<String> audienceRatingImage() {
        return audienceRatingImage;
    }

    /**
     * The source from which chapter data is derived.
     */
    @JsonIgnore
    public Optional<String> chapterSource() {
        return chapterSource;
    }

    /**
     * The primary extra key associated with this media item.
     */
    @JsonIgnore
    public Optional<String> primaryExtraKey() {
        return primaryExtraKey;
    }

    /**
     * The original title of the media item (if different).
     */
    @JsonIgnore
    public Optional<String> originalTitle() {
        return originalTitle;
    }

    /**
     * The rating key of the parent media item.
     */
    @JsonIgnore
    public Optional<String> parentRatingKey() {
        return parentRatingKey;
    }

    /**
     * The rating key of the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentRatingKey() {
        return grandparentRatingKey;
    }

    /**
     * The GUID of the parent media item.
     */
    @JsonIgnore
    public Optional<String> parentGuid() {
        return parentGuid;
    }

    /**
     * The GUID of the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentGuid() {
        return grandparentGuid;
    }

    /**
     * The slug for the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentSlug() {
        return grandparentSlug;
    }

    /**
     * The key of the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentKey() {
        return grandparentKey;
    }

    /**
     * The key of the parent media item.
     */
    @JsonIgnore
    public Optional<String> parentKey() {
        return parentKey;
    }

    /**
     * The title of the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentTitle() {
        return grandparentTitle;
    }

    /**
     * The thumbnail URL for the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentThumb() {
        return grandparentThumb;
    }

    /**
     * The theme URL for the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentTheme() {
        return grandparentTheme;
    }

    /**
     * The art URL for the grandparent media item.
     */
    @JsonIgnore
    public Optional<String> grandparentArt() {
        return grandparentArt;
    }

    /**
     * The title of the parent media item.
     */
    @JsonIgnore
    public Optional<String> parentTitle() {
        return parentTitle;
    }

    /**
     * The index position of the parent media item.
     */
    @JsonIgnore
    public Optional<Integer> parentIndex() {
        return parentIndex;
    }

    /**
     * The thumbnail URL for the parent media item.
     */
    @JsonIgnore
    public Optional<String> parentThumb() {
        return parentThumb;
    }

    /**
     * The URL for the rating image.
     */
    @JsonIgnore
    public Optional<String> ratingImage() {
        return ratingImage;
    }

    /**
     * The number of times this media item has been viewed.
     */
    @JsonIgnore
    public Optional<Integer> viewCount() {
        return viewCount;
    }

    /**
     * The current playback offset (in milliseconds).
     */
    @JsonIgnore
    public Optional<Integer> viewOffset() {
        return viewOffset;
    }

    /**
     * The number of times this media item has been skipped.
     */
    @JsonIgnore
    public Optional<Integer> skipCount() {
        return skipCount;
    }

    /**
     * A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
     */
    @JsonIgnore
    public Optional<String> subtype() {
        return subtype;
    }

    /**
     * The Unix timestamp representing the last time the item was rated.
     */
    @JsonIgnore
    public Optional<Long> lastRatedAt() {
        return lastRatedAt;
    }

    /**
     * The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available).
     */
    @JsonIgnore
    public Optional<String> createdAtAccuracy() {
        return createdAtAccuracy;
    }

    /**
     * The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
     */
    @JsonIgnore
    public Optional<String> createdAtTZOffset() {
        return createdAtTZOffset;
    }

    /**
     * Unix timestamp for when the media item was last viewed.
     */
    @JsonIgnore
    public Optional<Integer> lastViewedAt() {
        return lastViewedAt;
    }

    /**
     * The rating provided by a user for the item. This value is expressed as a decimal number.
     */
    @JsonIgnore
    public Optional<Float> userRating() {
        return userRating;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryImage>> image() {
        return (Optional<List<GetAllMediaLibraryImage>>) image;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<GetAllMediaLibraryUltraBlurColors> ultraBlurColors() {
        return (Optional<GetAllMediaLibraryUltraBlurColors>) ultraBlurColors;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryMedia>> media() {
        return (Optional<List<GetAllMediaLibraryMedia>>) media;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryGenre>> genre() {
        return (Optional<List<GetAllMediaLibraryGenre>>) genre;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryCountry>> country() {
        return (Optional<List<GetAllMediaLibraryCountry>>) country;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryDirector>> director() {
        return (Optional<List<GetAllMediaLibraryDirector>>) director;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryWriter>> writer() {
        return (Optional<List<GetAllMediaLibraryWriter>>) writer;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryRole>> role() {
        return (Optional<List<GetAllMediaLibraryRole>>) role;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<Guids>> guids() {
        return (Optional<List<Guids>>) guids;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<GetAllMediaLibraryCollection>> collection() {
        return (Optional<List<GetAllMediaLibraryCollection>>) collection;
    }

    public final static Builder builder() {
        return new Builder();
    }

    /**
     * The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API.
     */
    public GetAllMediaLibraryMetadata withRatingKey(String ratingKey) {
        Utils.checkNotNull(ratingKey, "ratingKey");
        this.ratingKey = ratingKey;
        return this;
    }

    /**
     * The unique key for the media item.
     */
    public GetAllMediaLibraryMetadata withKey(String key) {
        Utils.checkNotNull(key, "key");
        this.key = key;
        return this;
    }

    /**
     * The globally unique identifier for the media item.
     */
    public GetAllMediaLibraryMetadata withGuid(String guid) {
        Utils.checkNotNull(guid, "guid");
        this.guid = guid;
        return this;
    }

    /**
     * A URL‐friendly version of the media title.
     */
    public GetAllMediaLibraryMetadata withSlug(String slug) {
        Utils.checkNotNull(slug, "slug");
        this.slug = slug;
        return this;
    }

    /**
     * The studio that produced the media item.
     */
    public GetAllMediaLibraryMetadata withStudio(String studio) {
        Utils.checkNotNull(studio, "studio");
        this.studio = Optional.ofNullable(studio);
        return this;
    }

    /**
     * The studio that produced the media item.
     */
    public GetAllMediaLibraryMetadata withStudio(Optional<String> studio) {
        Utils.checkNotNull(studio, "studio");
        this.studio = studio;
        return this;
    }

    public GetAllMediaLibraryMetadata withType(GetAllMediaLibraryLibraryType type) {
        Utils.checkNotNull(type, "type");
        this.type = type;
        return this;
    }

    /**
     * The title of the media item.
     */
    public GetAllMediaLibraryMetadata withTitle(String title) {
        Utils.checkNotNull(title, "title");
        this.title = title;
        return this;
    }

    /**
     * The sort title used for ordering media items.
     */
    public GetAllMediaLibraryMetadata withTitleSort(String titleSort) {
        Utils.checkNotNull(titleSort, "titleSort");
        this.titleSort = titleSort;
        return this;
    }

    /**
     * The content rating for the media item.
     */
    public GetAllMediaLibraryMetadata withContentRating(String contentRating) {
        Utils.checkNotNull(contentRating, "contentRating");
        this.contentRating = Optional.ofNullable(contentRating);
        return this;
    }

    /**
     * The content rating for the media item.
     */
    public GetAllMediaLibraryMetadata withContentRating(Optional<String> contentRating) {
        Utils.checkNotNull(contentRating, "contentRating");
        this.contentRating = contentRating;
        return this;
    }

    /**
     * A synopsis of the media item.
     */
    public GetAllMediaLibraryMetadata withSummary(String summary) {
        Utils.checkNotNull(summary, "summary");
        this.summary = summary;
        return this;
    }

    /**
     * The critic rating for the media item.
     */
    public GetAllMediaLibraryMetadata withRating(float rating) {
        Utils.checkNotNull(rating, "rating");
        this.rating = rating;
        return this;
    }

    /**
     * The audience rating for the media item.
     */
    public GetAllMediaLibraryMetadata withAudienceRating(double audienceRating) {
        Utils.checkNotNull(audienceRating, "audienceRating");
        this.audienceRating = audienceRating;
        return this;
    }

    /**
     * The release year of the media item.
     */
    public GetAllMediaLibraryMetadata withYear(int year) {
        Utils.checkNotNull(year, "year");
        this.year = year;
        return this;
    }

    /**
     * A brief tagline for the media item.
     */
    public GetAllMediaLibraryMetadata withTagline(String tagline) {
        Utils.checkNotNull(tagline, "tagline");
        this.tagline = tagline;
        return this;
    }

    /**
     * The thumbnail image URL for the media item.
     */
    public GetAllMediaLibraryMetadata withThumb(String thumb) {
        Utils.checkNotNull(thumb, "thumb");
        this.thumb = thumb;
        return this;
    }

    /**
     * The art image URL for the media item.
     */
    public GetAllMediaLibraryMetadata withArt(String art) {
        Utils.checkNotNull(art, "art");
        this.art = art;
        return this;
    }

    /**
     * The theme URL for the media item.
     */
    public GetAllMediaLibraryMetadata withTheme(String theme) {
        Utils.checkNotNull(theme, "theme");
        this.theme = theme;
        return this;
    }

    /**
     * The index position of the media item.
     */
    public GetAllMediaLibraryMetadata withIndex(int index) {
        Utils.checkNotNull(index, "index");
        this.index = index;
        return this;
    }

    /**
     * The number of leaf items (end nodes) under this media item.
     */
    public GetAllMediaLibraryMetadata withLeafCount(int leafCount) {
        Utils.checkNotNull(leafCount, "leafCount");
        this.leafCount = Optional.ofNullable(leafCount);
        return this;
    }

    /**
     * The number of leaf items (end nodes) under this media item.
     */
    public GetAllMediaLibraryMetadata withLeafCount(Optional<Integer> leafCount) {
        Utils.checkNotNull(leafCount, "leafCount");
        this.leafCount = leafCount;
        return this;
    }

    /**
     * The number of leaf items that have been viewed.
     */
    public GetAllMediaLibraryMetadata withViewedLeafCount(int viewedLeafCount) {
        Utils.checkNotNull(viewedLeafCount, "viewedLeafCount");
        this.viewedLeafCount = Optional.ofNullable(viewedLeafCount);
        return this;
    }

    /**
     * The number of leaf items that have been viewed.
     */
    public GetAllMediaLibraryMetadata withViewedLeafCount(Optional<Integer> viewedLeafCount) {
        Utils.checkNotNull(viewedLeafCount, "viewedLeafCount");
        this.viewedLeafCount = viewedLeafCount;
        return this;
    }

    /**
     * The number of child items associated with this media item.
     */
    public GetAllMediaLibraryMetadata withChildCount(int childCount) {
        Utils.checkNotNull(childCount, "childCount");
        this.childCount = childCount;
        return this;
    }

    /**
     * The total number of seasons (for TV shows).
     */
    public GetAllMediaLibraryMetadata withSeasonCount(int seasonCount) {
        Utils.checkNotNull(seasonCount, "seasonCount");
        this.seasonCount = seasonCount;
        return this;
    }

    /**
     * The duration of the media item in milliseconds.
     */
    public GetAllMediaLibraryMetadata withDuration(int duration) {
        Utils.checkNotNull(duration, "duration");
        this.duration = duration;
        return this;
    }

    /**
     * The original release date of the media item.
     */
    public GetAllMediaLibraryMetadata withOriginallyAvailableAt(LocalDate originallyAvailableAt) {
        Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt");
        this.originallyAvailableAt = originallyAvailableAt;
        return this;
    }

    public GetAllMediaLibraryMetadata withAddedAt(long addedAt) {
        Utils.checkNotNull(addedAt, "addedAt");
        this.addedAt = addedAt;
        return this;
    }

    /**
     * Unix epoch datetime in seconds
     */
    public GetAllMediaLibraryMetadata withUpdatedAt(long updatedAt) {
        Utils.checkNotNull(updatedAt, "updatedAt");
        this.updatedAt = Optional.ofNullable(updatedAt);
        return this;
    }

    /**
     * Unix epoch datetime in seconds
     */
    public GetAllMediaLibraryMetadata withUpdatedAt(Optional<Long> updatedAt) {
        Utils.checkNotNull(updatedAt, "updatedAt");
        this.updatedAt = updatedAt;
        return this;
    }

    /**
     * The URL for the audience rating image.
     */
    public GetAllMediaLibraryMetadata withAudienceRatingImage(String audienceRatingImage) {
        Utils.checkNotNull(audienceRatingImage, "audienceRatingImage");
        this.audienceRatingImage = Optional.ofNullable(audienceRatingImage);
        return this;
    }

    /**
     * The URL for the audience rating image.
     */
    public GetAllMediaLibraryMetadata withAudienceRatingImage(Optional<String> audienceRatingImage) {
        Utils.checkNotNull(audienceRatingImage, "audienceRatingImage");
        this.audienceRatingImage = audienceRatingImage;
        return this;
    }

    /**
     * The source from which chapter data is derived.
     */
    public GetAllMediaLibraryMetadata withChapterSource(String chapterSource) {
        Utils.checkNotNull(chapterSource, "chapterSource");
        this.chapterSource = Optional.ofNullable(chapterSource);
        return this;
    }

    /**
     * The source from which chapter data is derived.
     */
    public GetAllMediaLibraryMetadata withChapterSource(Optional<String> chapterSource) {
        Utils.checkNotNull(chapterSource, "chapterSource");
        this.chapterSource = chapterSource;
        return this;
    }

    /**
     * The primary extra key associated with this media item.
     */
    public GetAllMediaLibraryMetadata withPrimaryExtraKey(String primaryExtraKey) {
        Utils.checkNotNull(primaryExtraKey, "primaryExtraKey");
        this.primaryExtraKey = Optional.ofNullable(primaryExtraKey);
        return this;
    }

    /**
     * The primary extra key associated with this media item.
     */
    public GetAllMediaLibraryMetadata withPrimaryExtraKey(Optional<String> primaryExtraKey) {
        Utils.checkNotNull(primaryExtraKey, "primaryExtraKey");
        this.primaryExtraKey = primaryExtraKey;
        return this;
    }

    /**
     * The original title of the media item (if different).
     */
    public GetAllMediaLibraryMetadata withOriginalTitle(String originalTitle) {
        Utils.checkNotNull(originalTitle, "originalTitle");
        this.originalTitle = Optional.ofNullable(originalTitle);
        return this;
    }

    /**
     * The original title of the media item (if different).
     */
    public GetAllMediaLibraryMetadata withOriginalTitle(Optional<String> originalTitle) {
        Utils.checkNotNull(originalTitle, "originalTitle");
        this.originalTitle = originalTitle;
        return this;
    }

    /**
     * The rating key of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentRatingKey(String parentRatingKey) {
        Utils.checkNotNull(parentRatingKey, "parentRatingKey");
        this.parentRatingKey = Optional.ofNullable(parentRatingKey);
        return this;
    }

    /**
     * The rating key of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentRatingKey(Optional<String> parentRatingKey) {
        Utils.checkNotNull(parentRatingKey, "parentRatingKey");
        this.parentRatingKey = parentRatingKey;
        return this;
    }

    /**
     * The rating key of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentRatingKey(String grandparentRatingKey) {
        Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey");
        this.grandparentRatingKey = Optional.ofNullable(grandparentRatingKey);
        return this;
    }

    /**
     * The rating key of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentRatingKey(Optional<String> grandparentRatingKey) {
        Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey");
        this.grandparentRatingKey = grandparentRatingKey;
        return this;
    }

    /**
     * The GUID of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentGuid(String parentGuid) {
        Utils.checkNotNull(parentGuid, "parentGuid");
        this.parentGuid = Optional.ofNullable(parentGuid);
        return this;
    }

    /**
     * The GUID of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentGuid(Optional<String> parentGuid) {
        Utils.checkNotNull(parentGuid, "parentGuid");
        this.parentGuid = parentGuid;
        return this;
    }

    /**
     * The GUID of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentGuid(String grandparentGuid) {
        Utils.checkNotNull(grandparentGuid, "grandparentGuid");
        this.grandparentGuid = Optional.ofNullable(grandparentGuid);
        return this;
    }

    /**
     * The GUID of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentGuid(Optional<String> grandparentGuid) {
        Utils.checkNotNull(grandparentGuid, "grandparentGuid");
        this.grandparentGuid = grandparentGuid;
        return this;
    }

    /**
     * The slug for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentSlug(String grandparentSlug) {
        Utils.checkNotNull(grandparentSlug, "grandparentSlug");
        this.grandparentSlug = Optional.ofNullable(grandparentSlug);
        return this;
    }

    /**
     * The slug for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentSlug(Optional<String> grandparentSlug) {
        Utils.checkNotNull(grandparentSlug, "grandparentSlug");
        this.grandparentSlug = grandparentSlug;
        return this;
    }

    /**
     * The key of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentKey(String grandparentKey) {
        Utils.checkNotNull(grandparentKey, "grandparentKey");
        this.grandparentKey = Optional.ofNullable(grandparentKey);
        return this;
    }

    /**
     * The key of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentKey(Optional<String> grandparentKey) {
        Utils.checkNotNull(grandparentKey, "grandparentKey");
        this.grandparentKey = grandparentKey;
        return this;
    }

    /**
     * The key of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentKey(String parentKey) {
        Utils.checkNotNull(parentKey, "parentKey");
        this.parentKey = Optional.ofNullable(parentKey);
        return this;
    }

    /**
     * The key of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentKey(Optional<String> parentKey) {
        Utils.checkNotNull(parentKey, "parentKey");
        this.parentKey = parentKey;
        return this;
    }

    /**
     * The title of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentTitle(String grandparentTitle) {
        Utils.checkNotNull(grandparentTitle, "grandparentTitle");
        this.grandparentTitle = Optional.ofNullable(grandparentTitle);
        return this;
    }

    /**
     * The title of the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentTitle(Optional<String> grandparentTitle) {
        Utils.checkNotNull(grandparentTitle, "grandparentTitle");
        this.grandparentTitle = grandparentTitle;
        return this;
    }

    /**
     * The thumbnail URL for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentThumb(String grandparentThumb) {
        Utils.checkNotNull(grandparentThumb, "grandparentThumb");
        this.grandparentThumb = Optional.ofNullable(grandparentThumb);
        return this;
    }

    /**
     * The thumbnail URL for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentThumb(Optional<String> grandparentThumb) {
        Utils.checkNotNull(grandparentThumb, "grandparentThumb");
        this.grandparentThumb = grandparentThumb;
        return this;
    }

    /**
     * The theme URL for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentTheme(String grandparentTheme) {
        Utils.checkNotNull(grandparentTheme, "grandparentTheme");
        this.grandparentTheme = Optional.ofNullable(grandparentTheme);
        return this;
    }

    /**
     * The theme URL for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentTheme(Optional<String> grandparentTheme) {
        Utils.checkNotNull(grandparentTheme, "grandparentTheme");
        this.grandparentTheme = grandparentTheme;
        return this;
    }

    /**
     * The art URL for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentArt(String grandparentArt) {
        Utils.checkNotNull(grandparentArt, "grandparentArt");
        this.grandparentArt = Optional.ofNullable(grandparentArt);
        return this;
    }

    /**
     * The art URL for the grandparent media item.
     */
    public GetAllMediaLibraryMetadata withGrandparentArt(Optional<String> grandparentArt) {
        Utils.checkNotNull(grandparentArt, "grandparentArt");
        this.grandparentArt = grandparentArt;
        return this;
    }

    /**
     * The title of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentTitle(String parentTitle) {
        Utils.checkNotNull(parentTitle, "parentTitle");
        this.parentTitle = Optional.ofNullable(parentTitle);
        return this;
    }

    /**
     * The title of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentTitle(Optional<String> parentTitle) {
        Utils.checkNotNull(parentTitle, "parentTitle");
        this.parentTitle = parentTitle;
        return this;
    }

    /**
     * The index position of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentIndex(int parentIndex) {
        Utils.checkNotNull(parentIndex, "parentIndex");
        this.parentIndex = Optional.ofNullable(parentIndex);
        return this;
    }

    /**
     * The index position of the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentIndex(Optional<Integer> parentIndex) {
        Utils.checkNotNull(parentIndex, "parentIndex");
        this.parentIndex = parentIndex;
        return this;
    }

    /**
     * The thumbnail URL for the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentThumb(String parentThumb) {
        Utils.checkNotNull(parentThumb, "parentThumb");
        this.parentThumb = Optional.ofNullable(parentThumb);
        return this;
    }

    /**
     * The thumbnail URL for the parent media item.
     */
    public GetAllMediaLibraryMetadata withParentThumb(Optional<String> parentThumb) {
        Utils.checkNotNull(parentThumb, "parentThumb");
        this.parentThumb = parentThumb;
        return this;
    }

    /**
     * The URL for the rating image.
     */
    public GetAllMediaLibraryMetadata withRatingImage(String ratingImage) {
        Utils.checkNotNull(ratingImage, "ratingImage");
        this.ratingImage = Optional.ofNullable(ratingImage);
        return this;
    }

    /**
     * The URL for the rating image.
     */
    public GetAllMediaLibraryMetadata withRatingImage(Optional<String> ratingImage) {
        Utils.checkNotNull(ratingImage, "ratingImage");
        this.ratingImage = ratingImage;
        return this;
    }

    /**
     * The number of times this media item has been viewed.
     */
    public GetAllMediaLibraryMetadata withViewCount(int viewCount) {
        Utils.checkNotNull(viewCount, "viewCount");
        this.viewCount = Optional.ofNullable(viewCount);
        return this;
    }

    /**
     * The number of times this media item has been viewed.
     */
    public GetAllMediaLibraryMetadata withViewCount(Optional<Integer> viewCount) {
        Utils.checkNotNull(viewCount, "viewCount");
        this.viewCount = viewCount;
        return this;
    }

    /**
     * The current playback offset (in milliseconds).
     */
    public GetAllMediaLibraryMetadata withViewOffset(int viewOffset) {
        Utils.checkNotNull(viewOffset, "viewOffset");
        this.viewOffset = Optional.ofNullable(viewOffset);
        return this;
    }

    /**
     * The current playback offset (in milliseconds).
     */
    public GetAllMediaLibraryMetadata withViewOffset(Optional<Integer> viewOffset) {
        Utils.checkNotNull(viewOffset, "viewOffset");
        this.viewOffset = viewOffset;
        return this;
    }

    /**
     * The number of times this media item has been skipped.
     */
    public GetAllMediaLibraryMetadata withSkipCount(int skipCount) {
        Utils.checkNotNull(skipCount, "skipCount");
        this.skipCount = Optional.ofNullable(skipCount);
        return this;
    }

    /**
     * The number of times this media item has been skipped.
     */
    public GetAllMediaLibraryMetadata withSkipCount(Optional<Integer> skipCount) {
        Utils.checkNotNull(skipCount, "skipCount");
        this.skipCount = skipCount;
        return this;
    }

    /**
     * A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
     */
    public GetAllMediaLibraryMetadata withSubtype(String subtype) {
        Utils.checkNotNull(subtype, "subtype");
        this.subtype = Optional.ofNullable(subtype);
        return this;
    }

    /**
     * A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
     */
    public GetAllMediaLibraryMetadata withSubtype(Optional<String> subtype) {
        Utils.checkNotNull(subtype, "subtype");
        this.subtype = subtype;
        return this;
    }

    /**
     * The Unix timestamp representing the last time the item was rated.
     */
    public GetAllMediaLibraryMetadata withLastRatedAt(long lastRatedAt) {
        Utils.checkNotNull(lastRatedAt, "lastRatedAt");
        this.lastRatedAt = Optional.ofNullable(lastRatedAt);
        return this;
    }

    /**
     * The Unix timestamp representing the last time the item was rated.
     */
    public GetAllMediaLibraryMetadata withLastRatedAt(Optional<Long> lastRatedAt) {
        Utils.checkNotNull(lastRatedAt, "lastRatedAt");
        this.lastRatedAt = lastRatedAt;
        return this;
    }

    /**
     * The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available).
     */
    public GetAllMediaLibraryMetadata withCreatedAtAccuracy(String createdAtAccuracy) {
        Utils.checkNotNull(createdAtAccuracy, "createdAtAccuracy");
        this.createdAtAccuracy = Optional.ofNullable(createdAtAccuracy);
        return this;
    }

    /**
     * The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available).
     */
    public GetAllMediaLibraryMetadata withCreatedAtAccuracy(Optional<String> createdAtAccuracy) {
        Utils.checkNotNull(createdAtAccuracy, "createdAtAccuracy");
        this.createdAtAccuracy = createdAtAccuracy;
        return this;
    }

    /**
     * The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
     */
    public GetAllMediaLibraryMetadata withCreatedAtTZOffset(String createdAtTZOffset) {
        Utils.checkNotNull(createdAtTZOffset, "createdAtTZOffset");
        this.createdAtTZOffset = Optional.ofNullable(createdAtTZOffset);
        return this;
    }

    /**
     * The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
     */
    public GetAllMediaLibraryMetadata withCreatedAtTZOffset(Optional<String> createdAtTZOffset) {
        Utils.checkNotNull(createdAtTZOffset, "createdAtTZOffset");
        this.createdAtTZOffset = createdAtTZOffset;
        return this;
    }

    /**
     * Unix timestamp for when the media item was last viewed.
     */
    public GetAllMediaLibraryMetadata withLastViewedAt(int lastViewedAt) {
        Utils.checkNotNull(lastViewedAt, "lastViewedAt");
        this.lastViewedAt = Optional.ofNullable(lastViewedAt);
        return this;
    }

    /**
     * Unix timestamp for when the media item was last viewed.
     */
    public GetAllMediaLibraryMetadata withLastViewedAt(Optional<Integer> lastViewedAt) {
        Utils.checkNotNull(lastViewedAt, "lastViewedAt");
        this.lastViewedAt = lastViewedAt;
        return this;
    }

    /**
     * The rating provided by a user for the item. This value is expressed as a decimal number.
     */
    public GetAllMediaLibraryMetadata withUserRating(float userRating) {
        Utils.checkNotNull(userRating, "userRating");
        this.userRating = Optional.ofNullable(userRating);
        return this;
    }

    /**
     * The rating provided by a user for the item. This value is expressed as a decimal number.
     */
    public GetAllMediaLibraryMetadata withUserRating(Optional<Float> userRating) {
        Utils.checkNotNull(userRating, "userRating");
        this.userRating = userRating;
        return this;
    }

    public GetAllMediaLibraryMetadata withImage(List<GetAllMediaLibraryImage> image) {
        Utils.checkNotNull(image, "image");
        this.image = Optional.ofNullable(image);
        return this;
    }

    public GetAllMediaLibraryMetadata withImage(Optional<? extends List<GetAllMediaLibraryImage>> image) {
        Utils.checkNotNull(image, "image");
        this.image = image;
        return this;
    }

    public GetAllMediaLibraryMetadata withUltraBlurColors(GetAllMediaLibraryUltraBlurColors ultraBlurColors) {
        Utils.checkNotNull(ultraBlurColors, "ultraBlurColors");
        this.ultraBlurColors = Optional.ofNullable(ultraBlurColors);
        return this;
    }

    public GetAllMediaLibraryMetadata withUltraBlurColors(Optional<? extends GetAllMediaLibraryUltraBlurColors> ultraBlurColors) {
        Utils.checkNotNull(ultraBlurColors, "ultraBlurColors");
        this.ultraBlurColors = ultraBlurColors;
        return this;
    }

    public GetAllMediaLibraryMetadata withMedia(List<GetAllMediaLibraryMedia> media) {
        Utils.checkNotNull(media, "media");
        this.media = Optional.ofNullable(media);
        return this;
    }

    public GetAllMediaLibraryMetadata withMedia(Optional<? extends List<GetAllMediaLibraryMedia>> media) {
        Utils.checkNotNull(media, "media");
        this.media = media;
        return this;
    }

    public GetAllMediaLibraryMetadata withGenre(List<GetAllMediaLibraryGenre> genre) {
        Utils.checkNotNull(genre, "genre");
        this.genre = Optional.ofNullable(genre);
        return this;
    }

    public GetAllMediaLibraryMetadata withGenre(Optional<? extends List<GetAllMediaLibraryGenre>> genre) {
        Utils.checkNotNull(genre, "genre");
        this.genre = genre;
        return this;
    }

    public GetAllMediaLibraryMetadata withCountry(List<GetAllMediaLibraryCountry> country) {
        Utils.checkNotNull(country, "country");
        this.country = Optional.ofNullable(country);
        return this;
    }

    public GetAllMediaLibraryMetadata withCountry(Optional<? extends List<GetAllMediaLibraryCountry>> country) {
        Utils.checkNotNull(country, "country");
        this.country = country;
        return this;
    }

    public GetAllMediaLibraryMetadata withDirector(List<GetAllMediaLibraryDirector> director) {
        Utils.checkNotNull(director, "director");
        this.director = Optional.ofNullable(director);
        return this;
    }

    public GetAllMediaLibraryMetadata withDirector(Optional<? extends List<GetAllMediaLibraryDirector>> director) {
        Utils.checkNotNull(director, "director");
        this.director = director;
        return this;
    }

    public GetAllMediaLibraryMetadata withWriter(List<GetAllMediaLibraryWriter> writer) {
        Utils.checkNotNull(writer, "writer");
        this.writer = Optional.ofNullable(writer);
        return this;
    }

    public GetAllMediaLibraryMetadata withWriter(Optional<? extends List<GetAllMediaLibraryWriter>> writer) {
        Utils.checkNotNull(writer, "writer");
        this.writer = writer;
        return this;
    }

    public GetAllMediaLibraryMetadata withRole(List<GetAllMediaLibraryRole> role) {
        Utils.checkNotNull(role, "role");
        this.role = Optional.ofNullable(role);
        return this;
    }

    public GetAllMediaLibraryMetadata withRole(Optional<? extends List<GetAllMediaLibraryRole>> role) {
        Utils.checkNotNull(role, "role");
        this.role = role;
        return this;
    }

    public GetAllMediaLibraryMetadata withGuids(List<Guids> guids) {
        Utils.checkNotNull(guids, "guids");
        this.guids = Optional.ofNullable(guids);
        return this;
    }

    public GetAllMediaLibraryMetadata withGuids(Optional<? extends List<Guids>> guids) {
        Utils.checkNotNull(guids, "guids");
        this.guids = guids;
        return this;
    }

    public GetAllMediaLibraryMetadata withCollection(List<GetAllMediaLibraryCollection> collection) {
        Utils.checkNotNull(collection, "collection");
        this.collection = Optional.ofNullable(collection);
        return this;
    }

    public GetAllMediaLibraryMetadata withCollection(Optional<? extends List<GetAllMediaLibraryCollection>> collection) {
        Utils.checkNotNull(collection, "collection");
        this.collection = collection;
        return this;
    }
    
    @Override
    public boolean equals(java.lang.Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        GetAllMediaLibraryMetadata other = (GetAllMediaLibraryMetadata) o;
        return 
            Objects.deepEquals(this.ratingKey, other.ratingKey) &&
            Objects.deepEquals(this.key, other.key) &&
            Objects.deepEquals(this.guid, other.guid) &&
            Objects.deepEquals(this.slug, other.slug) &&
            Objects.deepEquals(this.studio, other.studio) &&
            Objects.deepEquals(this.type, other.type) &&
            Objects.deepEquals(this.title, other.title) &&
            Objects.deepEquals(this.titleSort, other.titleSort) &&
            Objects.deepEquals(this.contentRating, other.contentRating) &&
            Objects.deepEquals(this.summary, other.summary) &&
            Objects.deepEquals(this.rating, other.rating) &&
            Objects.deepEquals(this.audienceRating, other.audienceRating) &&
            Objects.deepEquals(this.year, other.year) &&
            Objects.deepEquals(this.tagline, other.tagline) &&
            Objects.deepEquals(this.thumb, other.thumb) &&
            Objects.deepEquals(this.art, other.art) &&
            Objects.deepEquals(this.theme, other.theme) &&
            Objects.deepEquals(this.index, other.index) &&
            Objects.deepEquals(this.leafCount, other.leafCount) &&
            Objects.deepEquals(this.viewedLeafCount, other.viewedLeafCount) &&
            Objects.deepEquals(this.childCount, other.childCount) &&
            Objects.deepEquals(this.seasonCount, other.seasonCount) &&
            Objects.deepEquals(this.duration, other.duration) &&
            Objects.deepEquals(this.originallyAvailableAt, other.originallyAvailableAt) &&
            Objects.deepEquals(this.addedAt, other.addedAt) &&
            Objects.deepEquals(this.updatedAt, other.updatedAt) &&
            Objects.deepEquals(this.audienceRatingImage, other.audienceRatingImage) &&
            Objects.deepEquals(this.chapterSource, other.chapterSource) &&
            Objects.deepEquals(this.primaryExtraKey, other.primaryExtraKey) &&
            Objects.deepEquals(this.originalTitle, other.originalTitle) &&
            Objects.deepEquals(this.parentRatingKey, other.parentRatingKey) &&
            Objects.deepEquals(this.grandparentRatingKey, other.grandparentRatingKey) &&
            Objects.deepEquals(this.parentGuid, other.parentGuid) &&
            Objects.deepEquals(this.grandparentGuid, other.grandparentGuid) &&
            Objects.deepEquals(this.grandparentSlug, other.grandparentSlug) &&
            Objects.deepEquals(this.grandparentKey, other.grandparentKey) &&
            Objects.deepEquals(this.parentKey, other.parentKey) &&
            Objects.deepEquals(this.grandparentTitle, other.grandparentTitle) &&
            Objects.deepEquals(this.grandparentThumb, other.grandparentThumb) &&
            Objects.deepEquals(this.grandparentTheme, other.grandparentTheme) &&
            Objects.deepEquals(this.grandparentArt, other.grandparentArt) &&
            Objects.deepEquals(this.parentTitle, other.parentTitle) &&
            Objects.deepEquals(this.parentIndex, other.parentIndex) &&
            Objects.deepEquals(this.parentThumb, other.parentThumb) &&
            Objects.deepEquals(this.ratingImage, other.ratingImage) &&
            Objects.deepEquals(this.viewCount, other.viewCount) &&
            Objects.deepEquals(this.viewOffset, other.viewOffset) &&
            Objects.deepEquals(this.skipCount, other.skipCount) &&
            Objects.deepEquals(this.subtype, other.subtype) &&
            Objects.deepEquals(this.lastRatedAt, other.lastRatedAt) &&
            Objects.deepEquals(this.createdAtAccuracy, other.createdAtAccuracy) &&
            Objects.deepEquals(this.createdAtTZOffset, other.createdAtTZOffset) &&
            Objects.deepEquals(this.lastViewedAt, other.lastViewedAt) &&
            Objects.deepEquals(this.userRating, other.userRating) &&
            Objects.deepEquals(this.image, other.image) &&
            Objects.deepEquals(this.ultraBlurColors, other.ultraBlurColors) &&
            Objects.deepEquals(this.media, other.media) &&
            Objects.deepEquals(this.genre, other.genre) &&
            Objects.deepEquals(this.country, other.country) &&
            Objects.deepEquals(this.director, other.director) &&
            Objects.deepEquals(this.writer, other.writer) &&
            Objects.deepEquals(this.role, other.role) &&
            Objects.deepEquals(this.guids, other.guids) &&
            Objects.deepEquals(this.collection, other.collection);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(
            ratingKey,
            key,
            guid,
            slug,
            studio,
            type,
            title,
            titleSort,
            contentRating,
            summary,
            rating,
            audienceRating,
            year,
            tagline,
            thumb,
            art,
            theme,
            index,
            leafCount,
            viewedLeafCount,
            childCount,
            seasonCount,
            duration,
            originallyAvailableAt,
            addedAt,
            updatedAt,
            audienceRatingImage,
            chapterSource,
            primaryExtraKey,
            originalTitle,
            parentRatingKey,
            grandparentRatingKey,
            parentGuid,
            grandparentGuid,
            grandparentSlug,
            grandparentKey,
            parentKey,
            grandparentTitle,
            grandparentThumb,
            grandparentTheme,
            grandparentArt,
            parentTitle,
            parentIndex,
            parentThumb,
            ratingImage,
            viewCount,
            viewOffset,
            skipCount,
            subtype,
            lastRatedAt,
            createdAtAccuracy,
            createdAtTZOffset,
            lastViewedAt,
            userRating,
            image,
            ultraBlurColors,
            media,
            genre,
            country,
            director,
            writer,
            role,
            guids,
            collection);
    }
    
    @Override
    public String toString() {
        return Utils.toString(GetAllMediaLibraryMetadata.class,
                "ratingKey", ratingKey,
                "key", key,
                "guid", guid,
                "slug", slug,
                "studio", studio,
                "type", type,
                "title", title,
                "titleSort", titleSort,
                "contentRating", contentRating,
                "summary", summary,
                "rating", rating,
                "audienceRating", audienceRating,
                "year", year,
                "tagline", tagline,
                "thumb", thumb,
                "art", art,
                "theme", theme,
                "index", index,
                "leafCount", leafCount,
                "viewedLeafCount", viewedLeafCount,
                "childCount", childCount,
                "seasonCount", seasonCount,
                "duration", duration,
                "originallyAvailableAt", originallyAvailableAt,
                "addedAt", addedAt,
                "updatedAt", updatedAt,
                "audienceRatingImage", audienceRatingImage,
                "chapterSource", chapterSource,
                "primaryExtraKey", primaryExtraKey,
                "originalTitle", originalTitle,
                "parentRatingKey", parentRatingKey,
                "grandparentRatingKey", grandparentRatingKey,
                "parentGuid", parentGuid,
                "grandparentGuid", grandparentGuid,
                "grandparentSlug", grandparentSlug,
                "grandparentKey", grandparentKey,
                "parentKey", parentKey,
                "grandparentTitle", grandparentTitle,
                "grandparentThumb", grandparentThumb,
                "grandparentTheme", grandparentTheme,
                "grandparentArt", grandparentArt,
                "parentTitle", parentTitle,
                "parentIndex", parentIndex,
                "parentThumb", parentThumb,
                "ratingImage", ratingImage,
                "viewCount", viewCount,
                "viewOffset", viewOffset,
                "skipCount", skipCount,
                "subtype", subtype,
                "lastRatedAt", lastRatedAt,
                "createdAtAccuracy", createdAtAccuracy,
                "createdAtTZOffset", createdAtTZOffset,
                "lastViewedAt", lastViewedAt,
                "userRating", userRating,
                "image", image,
                "ultraBlurColors", ultraBlurColors,
                "media", media,
                "genre", genre,
                "country", country,
                "director", director,
                "writer", writer,
                "role", role,
                "guids", guids,
                "collection", collection);
    }
    
    public final static class Builder {
 
        private String ratingKey;
 
        private String key;
 
        private String guid;
 
        private String slug;
 
        private Optional<String> studio = Optional.empty();
 
        private GetAllMediaLibraryLibraryType type;
 
        private String title;
 
        private String titleSort;
 
        private Optional<String> contentRating = Optional.empty();
 
        private String summary;
 
        private Float rating;
 
        private Double audienceRating;
 
        private Integer year;
 
        private String tagline;
 
        private String thumb;
 
        private String art;
 
        private String theme;
 
        private Integer index;
 
        private Optional<Integer> leafCount = Optional.empty();
 
        private Optional<Integer> viewedLeafCount = Optional.empty();
 
        private Integer childCount;
 
        private Integer seasonCount;
 
        private Integer duration;
 
        private LocalDate originallyAvailableAt;
 
        private Long addedAt;
 
        private Optional<Long> updatedAt = Optional.empty();
 
        private Optional<String> audienceRatingImage = Optional.empty();
 
        private Optional<String> chapterSource = Optional.empty();
 
        private Optional<String> primaryExtraKey = Optional.empty();
 
        private Optional<String> originalTitle = Optional.empty();
 
        private Optional<String> parentRatingKey = Optional.empty();
 
        private Optional<String> grandparentRatingKey = Optional.empty();
 
        private Optional<String> parentGuid = Optional.empty();
 
        private Optional<String> grandparentGuid = Optional.empty();
 
        private Optional<String> grandparentSlug = Optional.empty();
 
        private Optional<String> grandparentKey = Optional.empty();
 
        private Optional<String> parentKey = Optional.empty();
 
        private Optional<String> grandparentTitle = Optional.empty();
 
        private Optional<String> grandparentThumb = Optional.empty();
 
        private Optional<String> grandparentTheme = Optional.empty();
 
        private Optional<String> grandparentArt = Optional.empty();
 
        private Optional<String> parentTitle = Optional.empty();
 
        private Optional<Integer> parentIndex = Optional.empty();
 
        private Optional<String> parentThumb = Optional.empty();
 
        private Optional<String> ratingImage = Optional.empty();
 
        private Optional<Integer> viewCount = Optional.empty();
 
        private Optional<Integer> viewOffset = Optional.empty();
 
        private Optional<Integer> skipCount = Optional.empty();
 
        private Optional<String> subtype = Optional.empty();
 
        private Optional<Long> lastRatedAt = Optional.empty();
 
        private Optional<String> createdAtAccuracy = Optional.empty();
 
        private Optional<String> createdAtTZOffset = Optional.empty();
 
        private Optional<Integer> lastViewedAt = Optional.empty();
 
        private Optional<Float> userRating = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryImage>> image = Optional.empty();
 
        private Optional<? extends GetAllMediaLibraryUltraBlurColors> ultraBlurColors = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryMedia>> media = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryGenre>> genre = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryCountry>> country = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryDirector>> director = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryWriter>> writer = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryRole>> role = Optional.empty();
 
        private Optional<? extends List<Guids>> guids = Optional.empty();
 
        private Optional<? extends List<GetAllMediaLibraryCollection>> collection = Optional.empty();  
        
        private Builder() {
          // force use of static builder() method
        }

        /**
         * The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API.
         */
        public Builder ratingKey(String ratingKey) {
            Utils.checkNotNull(ratingKey, "ratingKey");
            this.ratingKey = ratingKey;
            return this;
        }

        /**
         * The unique key for the media item.
         */
        public Builder key(String key) {
            Utils.checkNotNull(key, "key");
            this.key = key;
            return this;
        }

        /**
         * The globally unique identifier for the media item.
         */
        public Builder guid(String guid) {
            Utils.checkNotNull(guid, "guid");
            this.guid = guid;
            return this;
        }

        /**
         * A URL‐friendly version of the media title.
         */
        public Builder slug(String slug) {
            Utils.checkNotNull(slug, "slug");
            this.slug = slug;
            return this;
        }

        /**
         * The studio that produced the media item.
         */
        public Builder studio(String studio) {
            Utils.checkNotNull(studio, "studio");
            this.studio = Optional.ofNullable(studio);
            return this;
        }

        /**
         * The studio that produced the media item.
         */
        public Builder studio(Optional<String> studio) {
            Utils.checkNotNull(studio, "studio");
            this.studio = studio;
            return this;
        }

        public Builder type(GetAllMediaLibraryLibraryType type) {
            Utils.checkNotNull(type, "type");
            this.type = type;
            return this;
        }

        /**
         * The title of the media item.
         */
        public Builder title(String title) {
            Utils.checkNotNull(title, "title");
            this.title = title;
            return this;
        }

        /**
         * The sort title used for ordering media items.
         */
        public Builder titleSort(String titleSort) {
            Utils.checkNotNull(titleSort, "titleSort");
            this.titleSort = titleSort;
            return this;
        }

        /**
         * The content rating for the media item.
         */
        public Builder contentRating(String contentRating) {
            Utils.checkNotNull(contentRating, "contentRating");
            this.contentRating = Optional.ofNullable(contentRating);
            return this;
        }

        /**
         * The content rating for the media item.
         */
        public Builder contentRating(Optional<String> contentRating) {
            Utils.checkNotNull(contentRating, "contentRating");
            this.contentRating = contentRating;
            return this;
        }

        /**
         * A synopsis of the media item.
         */
        public Builder summary(String summary) {
            Utils.checkNotNull(summary, "summary");
            this.summary = summary;
            return this;
        }

        /**
         * The critic rating for the media item.
         */
        public Builder rating(float rating) {
            Utils.checkNotNull(rating, "rating");
            this.rating = rating;
            return this;
        }

        /**
         * The audience rating for the media item.
         */
        public Builder audienceRating(double audienceRating) {
            Utils.checkNotNull(audienceRating, "audienceRating");
            this.audienceRating = audienceRating;
            return this;
        }

        /**
         * The release year of the media item.
         */
        public Builder year(int year) {
            Utils.checkNotNull(year, "year");
            this.year = year;
            return this;
        }

        /**
         * A brief tagline for the media item.
         */
        public Builder tagline(String tagline) {
            Utils.checkNotNull(tagline, "tagline");
            this.tagline = tagline;
            return this;
        }

        /**
         * The thumbnail image URL for the media item.
         */
        public Builder thumb(String thumb) {
            Utils.checkNotNull(thumb, "thumb");
            this.thumb = thumb;
            return this;
        }

        /**
         * The art image URL for the media item.
         */
        public Builder art(String art) {
            Utils.checkNotNull(art, "art");
            this.art = art;
            return this;
        }

        /**
         * The theme URL for the media item.
         */
        public Builder theme(String theme) {
            Utils.checkNotNull(theme, "theme");
            this.theme = theme;
            return this;
        }

        /**
         * The index position of the media item.
         */
        public Builder index(int index) {
            Utils.checkNotNull(index, "index");
            this.index = index;
            return this;
        }

        /**
         * The number of leaf items (end nodes) under this media item.
         */
        public Builder leafCount(int leafCount) {
            Utils.checkNotNull(leafCount, "leafCount");
            this.leafCount = Optional.ofNullable(leafCount);
            return this;
        }

        /**
         * The number of leaf items (end nodes) under this media item.
         */
        public Builder leafCount(Optional<Integer> leafCount) {
            Utils.checkNotNull(leafCount, "leafCount");
            this.leafCount = leafCount;
            return this;
        }

        /**
         * The number of leaf items that have been viewed.
         */
        public Builder viewedLeafCount(int viewedLeafCount) {
            Utils.checkNotNull(viewedLeafCount, "viewedLeafCount");
            this.viewedLeafCount = Optional.ofNullable(viewedLeafCount);
            return this;
        }

        /**
         * The number of leaf items that have been viewed.
         */
        public Builder viewedLeafCount(Optional<Integer> viewedLeafCount) {
            Utils.checkNotNull(viewedLeafCount, "viewedLeafCount");
            this.viewedLeafCount = viewedLeafCount;
            return this;
        }

        /**
         * The number of child items associated with this media item.
         */
        public Builder childCount(int childCount) {
            Utils.checkNotNull(childCount, "childCount");
            this.childCount = childCount;
            return this;
        }

        /**
         * The total number of seasons (for TV shows).
         */
        public Builder seasonCount(int seasonCount) {
            Utils.checkNotNull(seasonCount, "seasonCount");
            this.seasonCount = seasonCount;
            return this;
        }

        /**
         * The duration of the media item in milliseconds.
         */
        public Builder duration(int duration) {
            Utils.checkNotNull(duration, "duration");
            this.duration = duration;
            return this;
        }

        /**
         * The original release date of the media item.
         */
        public Builder originallyAvailableAt(LocalDate originallyAvailableAt) {
            Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt");
            this.originallyAvailableAt = originallyAvailableAt;
            return this;
        }

        public Builder addedAt(long addedAt) {
            Utils.checkNotNull(addedAt, "addedAt");
            this.addedAt = addedAt;
            return this;
        }

        /**
         * Unix epoch datetime in seconds
         */
        public Builder updatedAt(long updatedAt) {
            Utils.checkNotNull(updatedAt, "updatedAt");
            this.updatedAt = Optional.ofNullable(updatedAt);
            return this;
        }

        /**
         * Unix epoch datetime in seconds
         */
        public Builder updatedAt(Optional<Long> updatedAt) {
            Utils.checkNotNull(updatedAt, "updatedAt");
            this.updatedAt = updatedAt;
            return this;
        }

        /**
         * The URL for the audience rating image.
         */
        public Builder audienceRatingImage(String audienceRatingImage) {
            Utils.checkNotNull(audienceRatingImage, "audienceRatingImage");
            this.audienceRatingImage = Optional.ofNullable(audienceRatingImage);
            return this;
        }

        /**
         * The URL for the audience rating image.
         */
        public Builder audienceRatingImage(Optional<String> audienceRatingImage) {
            Utils.checkNotNull(audienceRatingImage, "audienceRatingImage");
            this.audienceRatingImage = audienceRatingImage;
            return this;
        }

        /**
         * The source from which chapter data is derived.
         */
        public Builder chapterSource(String chapterSource) {
            Utils.checkNotNull(chapterSource, "chapterSource");
            this.chapterSource = Optional.ofNullable(chapterSource);
            return this;
        }

        /**
         * The source from which chapter data is derived.
         */
        public Builder chapterSource(Optional<String> chapterSource) {
            Utils.checkNotNull(chapterSource, "chapterSource");
            this.chapterSource = chapterSource;
            return this;
        }

        /**
         * The primary extra key associated with this media item.
         */
        public Builder primaryExtraKey(String primaryExtraKey) {
            Utils.checkNotNull(primaryExtraKey, "primaryExtraKey");
            this.primaryExtraKey = Optional.ofNullable(primaryExtraKey);
            return this;
        }

        /**
         * The primary extra key associated with this media item.
         */
        public Builder primaryExtraKey(Optional<String> primaryExtraKey) {
            Utils.checkNotNull(primaryExtraKey, "primaryExtraKey");
            this.primaryExtraKey = primaryExtraKey;
            return this;
        }

        /**
         * The original title of the media item (if different).
         */
        public Builder originalTitle(String originalTitle) {
            Utils.checkNotNull(originalTitle, "originalTitle");
            this.originalTitle = Optional.ofNullable(originalTitle);
            return this;
        }

        /**
         * The original title of the media item (if different).
         */
        public Builder originalTitle(Optional<String> originalTitle) {
            Utils.checkNotNull(originalTitle, "originalTitle");
            this.originalTitle = originalTitle;
            return this;
        }

        /**
         * The rating key of the parent media item.
         */
        public Builder parentRatingKey(String parentRatingKey) {
            Utils.checkNotNull(parentRatingKey, "parentRatingKey");
            this.parentRatingKey = Optional.ofNullable(parentRatingKey);
            return this;
        }

        /**
         * The rating key of the parent media item.
         */
        public Builder parentRatingKey(Optional<String> parentRatingKey) {
            Utils.checkNotNull(parentRatingKey, "parentRatingKey");
            this.parentRatingKey = parentRatingKey;
            return this;
        }

        /**
         * The rating key of the grandparent media item.
         */
        public Builder grandparentRatingKey(String grandparentRatingKey) {
            Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey");
            this.grandparentRatingKey = Optional.ofNullable(grandparentRatingKey);
            return this;
        }

        /**
         * The rating key of the grandparent media item.
         */
        public Builder grandparentRatingKey(Optional<String> grandparentRatingKey) {
            Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey");
            this.grandparentRatingKey = grandparentRatingKey;
            return this;
        }

        /**
         * The GUID of the parent media item.
         */
        public Builder parentGuid(String parentGuid) {
            Utils.checkNotNull(parentGuid, "parentGuid");
            this.parentGuid = Optional.ofNullable(parentGuid);
            return this;
        }

        /**
         * The GUID of the parent media item.
         */
        public Builder parentGuid(Optional<String> parentGuid) {
            Utils.checkNotNull(parentGuid, "parentGuid");
            this.parentGuid = parentGuid;
            return this;
        }

        /**
         * The GUID of the grandparent media item.
         */
        public Builder grandparentGuid(String grandparentGuid) {
            Utils.checkNotNull(grandparentGuid, "grandparentGuid");
            this.grandparentGuid = Optional.ofNullable(grandparentGuid);
            return this;
        }

        /**
         * The GUID of the grandparent media item.
         */
        public Builder grandparentGuid(Optional<String> grandparentGuid) {
            Utils.checkNotNull(grandparentGuid, "grandparentGuid");
            this.grandparentGuid = grandparentGuid;
            return this;
        }

        /**
         * The slug for the grandparent media item.
         */
        public Builder grandparentSlug(String grandparentSlug) {
            Utils.checkNotNull(grandparentSlug, "grandparentSlug");
            this.grandparentSlug = Optional.ofNullable(grandparentSlug);
            return this;
        }

        /**
         * The slug for the grandparent media item.
         */
        public Builder grandparentSlug(Optional<String> grandparentSlug) {
            Utils.checkNotNull(grandparentSlug, "grandparentSlug");
            this.grandparentSlug = grandparentSlug;
            return this;
        }

        /**
         * The key of the grandparent media item.
         */
        public Builder grandparentKey(String grandparentKey) {
            Utils.checkNotNull(grandparentKey, "grandparentKey");
            this.grandparentKey = Optional.ofNullable(grandparentKey);
            return this;
        }

        /**
         * The key of the grandparent media item.
         */
        public Builder grandparentKey(Optional<String> grandparentKey) {
            Utils.checkNotNull(grandparentKey, "grandparentKey");
            this.grandparentKey = grandparentKey;
            return this;
        }

        /**
         * The key of the parent media item.
         */
        public Builder parentKey(String parentKey) {
            Utils.checkNotNull(parentKey, "parentKey");
            this.parentKey = Optional.ofNullable(parentKey);
            return this;
        }

        /**
         * The key of the parent media item.
         */
        public Builder parentKey(Optional<String> parentKey) {
            Utils.checkNotNull(parentKey, "parentKey");
            this.parentKey = parentKey;
            return this;
        }

        /**
         * The title of the grandparent media item.
         */
        public Builder grandparentTitle(String grandparentTitle) {
            Utils.checkNotNull(grandparentTitle, "grandparentTitle");
            this.grandparentTitle = Optional.ofNullable(grandparentTitle);
            return this;
        }

        /**
         * The title of the grandparent media item.
         */
        public Builder grandparentTitle(Optional<String> grandparentTitle) {
            Utils.checkNotNull(grandparentTitle, "grandparentTitle");
            this.grandparentTitle = grandparentTitle;
            return this;
        }

        /**
         * The thumbnail URL for the grandparent media item.
         */
        public Builder grandparentThumb(String grandparentThumb) {
            Utils.checkNotNull(grandparentThumb, "grandparentThumb");
            this.grandparentThumb = Optional.ofNullable(grandparentThumb);
            return this;
        }

        /**
         * The thumbnail URL for the grandparent media item.
         */
        public Builder grandparentThumb(Optional<String> grandparentThumb) {
            Utils.checkNotNull(grandparentThumb, "grandparentThumb");
            this.grandparentThumb = grandparentThumb;
            return this;
        }

        /**
         * The theme URL for the grandparent media item.
         */
        public Builder grandparentTheme(String grandparentTheme) {
            Utils.checkNotNull(grandparentTheme, "grandparentTheme");
            this.grandparentTheme = Optional.ofNullable(grandparentTheme);
            return this;
        }

        /**
         * The theme URL for the grandparent media item.
         */
        public Builder grandparentTheme(Optional<String> grandparentTheme) {
            Utils.checkNotNull(grandparentTheme, "grandparentTheme");
            this.grandparentTheme = grandparentTheme;
            return this;
        }

        /**
         * The art URL for the grandparent media item.
         */
        public Builder grandparentArt(String grandparentArt) {
            Utils.checkNotNull(grandparentArt, "grandparentArt");
            this.grandparentArt = Optional.ofNullable(grandparentArt);
            return this;
        }

        /**
         * The art URL for the grandparent media item.
         */
        public Builder grandparentArt(Optional<String> grandparentArt) {
            Utils.checkNotNull(grandparentArt, "grandparentArt");
            this.grandparentArt = grandparentArt;
            return this;
        }

        /**
         * The title of the parent media item.
         */
        public Builder parentTitle(String parentTitle) {
            Utils.checkNotNull(parentTitle, "parentTitle");
            this.parentTitle = Optional.ofNullable(parentTitle);
            return this;
        }

        /**
         * The title of the parent media item.
         */
        public Builder parentTitle(Optional<String> parentTitle) {
            Utils.checkNotNull(parentTitle, "parentTitle");
            this.parentTitle = parentTitle;
            return this;
        }

        /**
         * The index position of the parent media item.
         */
        public Builder parentIndex(int parentIndex) {
            Utils.checkNotNull(parentIndex, "parentIndex");
            this.parentIndex = Optional.ofNullable(parentIndex);
            return this;
        }

        /**
         * The index position of the parent media item.
         */
        public Builder parentIndex(Optional<Integer> parentIndex) {
            Utils.checkNotNull(parentIndex, "parentIndex");
            this.parentIndex = parentIndex;
            return this;
        }

        /**
         * The thumbnail URL for the parent media item.
         */
        public Builder parentThumb(String parentThumb) {
            Utils.checkNotNull(parentThumb, "parentThumb");
            this.parentThumb = Optional.ofNullable(parentThumb);
            return this;
        }

        /**
         * The thumbnail URL for the parent media item.
         */
        public Builder parentThumb(Optional<String> parentThumb) {
            Utils.checkNotNull(parentThumb, "parentThumb");
            this.parentThumb = parentThumb;
            return this;
        }

        /**
         * The URL for the rating image.
         */
        public Builder ratingImage(String ratingImage) {
            Utils.checkNotNull(ratingImage, "ratingImage");
            this.ratingImage = Optional.ofNullable(ratingImage);
            return this;
        }

        /**
         * The URL for the rating image.
         */
        public Builder ratingImage(Optional<String> ratingImage) {
            Utils.checkNotNull(ratingImage, "ratingImage");
            this.ratingImage = ratingImage;
            return this;
        }

        /**
         * The number of times this media item has been viewed.
         */
        public Builder viewCount(int viewCount) {
            Utils.checkNotNull(viewCount, "viewCount");
            this.viewCount = Optional.ofNullable(viewCount);
            return this;
        }

        /**
         * The number of times this media item has been viewed.
         */
        public Builder viewCount(Optional<Integer> viewCount) {
            Utils.checkNotNull(viewCount, "viewCount");
            this.viewCount = viewCount;
            return this;
        }

        /**
         * The current playback offset (in milliseconds).
         */
        public Builder viewOffset(int viewOffset) {
            Utils.checkNotNull(viewOffset, "viewOffset");
            this.viewOffset = Optional.ofNullable(viewOffset);
            return this;
        }

        /**
         * The current playback offset (in milliseconds).
         */
        public Builder viewOffset(Optional<Integer> viewOffset) {
            Utils.checkNotNull(viewOffset, "viewOffset");
            this.viewOffset = viewOffset;
            return this;
        }

        /**
         * The number of times this media item has been skipped.
         */
        public Builder skipCount(int skipCount) {
            Utils.checkNotNull(skipCount, "skipCount");
            this.skipCount = Optional.ofNullable(skipCount);
            return this;
        }

        /**
         * The number of times this media item has been skipped.
         */
        public Builder skipCount(Optional<Integer> skipCount) {
            Utils.checkNotNull(skipCount, "skipCount");
            this.skipCount = skipCount;
            return this;
        }

        /**
         * A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
         */
        public Builder subtype(String subtype) {
            Utils.checkNotNull(subtype, "subtype");
            this.subtype = Optional.ofNullable(subtype);
            return this;
        }

        /**
         * A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
         */
        public Builder subtype(Optional<String> subtype) {
            Utils.checkNotNull(subtype, "subtype");
            this.subtype = subtype;
            return this;
        }

        /**
         * The Unix timestamp representing the last time the item was rated.
         */
        public Builder lastRatedAt(long lastRatedAt) {
            Utils.checkNotNull(lastRatedAt, "lastRatedAt");
            this.lastRatedAt = Optional.ofNullable(lastRatedAt);
            return this;
        }

        /**
         * The Unix timestamp representing the last time the item was rated.
         */
        public Builder lastRatedAt(Optional<Long> lastRatedAt) {
            Utils.checkNotNull(lastRatedAt, "lastRatedAt");
            this.lastRatedAt = lastRatedAt;
            return this;
        }

        /**
         * The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available).
         */
        public Builder createdAtAccuracy(String createdAtAccuracy) {
            Utils.checkNotNull(createdAtAccuracy, "createdAtAccuracy");
            this.createdAtAccuracy = Optional.ofNullable(createdAtAccuracy);
            return this;
        }

        /**
         * The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available).
         */
        public Builder createdAtAccuracy(Optional<String> createdAtAccuracy) {
            Utils.checkNotNull(createdAtAccuracy, "createdAtAccuracy");
            this.createdAtAccuracy = createdAtAccuracy;
            return this;
        }

        /**
         * The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
         */
        public Builder createdAtTZOffset(String createdAtTZOffset) {
            Utils.checkNotNull(createdAtTZOffset, "createdAtTZOffset");
            this.createdAtTZOffset = Optional.ofNullable(createdAtTZOffset);
            return this;
        }

        /**
         * The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
         */
        public Builder createdAtTZOffset(Optional<String> createdAtTZOffset) {
            Utils.checkNotNull(createdAtTZOffset, "createdAtTZOffset");
            this.createdAtTZOffset = createdAtTZOffset;
            return this;
        }

        /**
         * Unix timestamp for when the media item was last viewed.
         */
        public Builder lastViewedAt(int lastViewedAt) {
            Utils.checkNotNull(lastViewedAt, "lastViewedAt");
            this.lastViewedAt = Optional.ofNullable(lastViewedAt);
            return this;
        }

        /**
         * Unix timestamp for when the media item was last viewed.
         */
        public Builder lastViewedAt(Optional<Integer> lastViewedAt) {
            Utils.checkNotNull(lastViewedAt, "lastViewedAt");
            this.lastViewedAt = lastViewedAt;
            return this;
        }

        /**
         * The rating provided by a user for the item. This value is expressed as a decimal number.
         */
        public Builder userRating(float userRating) {
            Utils.checkNotNull(userRating, "userRating");
            this.userRating = Optional.ofNullable(userRating);
            return this;
        }

        /**
         * The rating provided by a user for the item. This value is expressed as a decimal number.
         */
        public Builder userRating(Optional<Float> userRating) {
            Utils.checkNotNull(userRating, "userRating");
            this.userRating = userRating;
            return this;
        }

        public Builder image(List<GetAllMediaLibraryImage> image) {
            Utils.checkNotNull(image, "image");
            this.image = Optional.ofNullable(image);
            return this;
        }

        public Builder image(Optional<? extends List<GetAllMediaLibraryImage>> image) {
            Utils.checkNotNull(image, "image");
            this.image = image;
            return this;
        }

        public Builder ultraBlurColors(GetAllMediaLibraryUltraBlurColors ultraBlurColors) {
            Utils.checkNotNull(ultraBlurColors, "ultraBlurColors");
            this.ultraBlurColors = Optional.ofNullable(ultraBlurColors);
            return this;
        }

        public Builder ultraBlurColors(Optional<? extends GetAllMediaLibraryUltraBlurColors> ultraBlurColors) {
            Utils.checkNotNull(ultraBlurColors, "ultraBlurColors");
            this.ultraBlurColors = ultraBlurColors;
            return this;
        }

        public Builder media(List<GetAllMediaLibraryMedia> media) {
            Utils.checkNotNull(media, "media");
            this.media = Optional.ofNullable(media);
            return this;
        }

        public Builder media(Optional<? extends List<GetAllMediaLibraryMedia>> media) {
            Utils.checkNotNull(media, "media");
            this.media = media;
            return this;
        }

        public Builder genre(List<GetAllMediaLibraryGenre> genre) {
            Utils.checkNotNull(genre, "genre");
            this.genre = Optional.ofNullable(genre);
            return this;
        }

        public Builder genre(Optional<? extends List<GetAllMediaLibraryGenre>> genre) {
            Utils.checkNotNull(genre, "genre");
            this.genre = genre;
            return this;
        }

        public Builder country(List<GetAllMediaLibraryCountry> country) {
            Utils.checkNotNull(country, "country");
            this.country = Optional.ofNullable(country);
            return this;
        }

        public Builder country(Optional<? extends List<GetAllMediaLibraryCountry>> country) {
            Utils.checkNotNull(country, "country");
            this.country = country;
            return this;
        }

        public Builder director(List<GetAllMediaLibraryDirector> director) {
            Utils.checkNotNull(director, "director");
            this.director = Optional.ofNullable(director);
            return this;
        }

        public Builder director(Optional<? extends List<GetAllMediaLibraryDirector>> director) {
            Utils.checkNotNull(director, "director");
            this.director = director;
            return this;
        }

        public Builder writer(List<GetAllMediaLibraryWriter> writer) {
            Utils.checkNotNull(writer, "writer");
            this.writer = Optional.ofNullable(writer);
            return this;
        }

        public Builder writer(Optional<? extends List<GetAllMediaLibraryWriter>> writer) {
            Utils.checkNotNull(writer, "writer");
            this.writer = writer;
            return this;
        }

        public Builder role(List<GetAllMediaLibraryRole> role) {
            Utils.checkNotNull(role, "role");
            this.role = Optional.ofNullable(role);
            return this;
        }

        public Builder role(Optional<? extends List<GetAllMediaLibraryRole>> role) {
            Utils.checkNotNull(role, "role");
            this.role = role;
            return this;
        }

        public Builder guids(List<Guids> guids) {
            Utils.checkNotNull(guids, "guids");
            this.guids = Optional.ofNullable(guids);
            return this;
        }

        public Builder guids(Optional<? extends List<Guids>> guids) {
            Utils.checkNotNull(guids, "guids");
            this.guids = guids;
            return this;
        }

        public Builder collection(List<GetAllMediaLibraryCollection> collection) {
            Utils.checkNotNull(collection, "collection");
            this.collection = Optional.ofNullable(collection);
            return this;
        }

        public Builder collection(Optional<? extends List<GetAllMediaLibraryCollection>> collection) {
            Utils.checkNotNull(collection, "collection");
            this.collection = collection;
            return this;
        }
        
        public GetAllMediaLibraryMetadata build() {
            return new GetAllMediaLibraryMetadata(
                ratingKey,
                key,
                guid,
                slug,
                studio,
                type,
                title,
                titleSort,
                contentRating,
                summary,
                rating,
                audienceRating,
                year,
                tagline,
                thumb,
                art,
                theme,
                index,
                leafCount,
                viewedLeafCount,
                childCount,
                seasonCount,
                duration,
                originallyAvailableAt,
                addedAt,
                updatedAt,
                audienceRatingImage,
                chapterSource,
                primaryExtraKey,
                originalTitle,
                parentRatingKey,
                grandparentRatingKey,
                parentGuid,
                grandparentGuid,
                grandparentSlug,
                grandparentKey,
                parentKey,
                grandparentTitle,
                grandparentThumb,
                grandparentTheme,
                grandparentArt,
                parentTitle,
                parentIndex,
                parentThumb,
                ratingImage,
                viewCount,
                viewOffset,
                skipCount,
                subtype,
                lastRatedAt,
                createdAtAccuracy,
                createdAtTZOffset,
                lastViewedAt,
                userRating,
                image,
                ultraBlurColors,
                media,
                genre,
                country,
                director,
                writer,
                role,
                guids,
                collection);
        }
    }
}

