/* tslint:disable */
/* eslint-disable */
/**
 * Jellyfin API
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 10.8.9
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { exists, mapValues } from '../runtime';
import type { ClientCapabilitiesDtoDeviceProfile } from './ClientCapabilitiesDtoDeviceProfile';
import {
    ClientCapabilitiesDtoDeviceProfileFromJSON,
    ClientCapabilitiesDtoDeviceProfileFromJSONTyped,
    ClientCapabilitiesDtoDeviceProfileToJSON,
} from './ClientCapabilitiesDtoDeviceProfile';

/**
 * Plabyback info dto.
 * @export
 * @interface PlaybackInfoDto
 */
export interface PlaybackInfoDto {
    /**
     * Gets or sets the playback userId.
     * @type {string}
     * @memberof PlaybackInfoDto
     */
    userId?: string | null;
    /**
     * Gets or sets the max streaming bitrate.
     * @type {number}
     * @memberof PlaybackInfoDto
     */
    maxStreamingBitrate?: number | null;
    /**
     * Gets or sets the start time in ticks.
     * @type {number}
     * @memberof PlaybackInfoDto
     */
    startTimeTicks?: number | null;
    /**
     * Gets or sets the audio stream index.
     * @type {number}
     * @memberof PlaybackInfoDto
     */
    audioStreamIndex?: number | null;
    /**
     * Gets or sets the subtitle stream index.
     * @type {number}
     * @memberof PlaybackInfoDto
     */
    subtitleStreamIndex?: number | null;
    /**
     * Gets or sets the max audio channels.
     * @type {number}
     * @memberof PlaybackInfoDto
     */
    maxAudioChannels?: number | null;
    /**
     * Gets or sets the media source id.
     * @type {string}
     * @memberof PlaybackInfoDto
     */
    mediaSourceId?: string | null;
    /**
     * Gets or sets the live stream id.
     * @type {string}
     * @memberof PlaybackInfoDto
     */
    liveStreamId?: string | null;
    /**
     * 
     * @type {ClientCapabilitiesDtoDeviceProfile}
     * @memberof PlaybackInfoDto
     */
    deviceProfile?: ClientCapabilitiesDtoDeviceProfile | null;
    /**
     * Gets or sets a value indicating whether to enable direct play.
     * @type {boolean}
     * @memberof PlaybackInfoDto
     */
    enableDirectPlay?: boolean | null;
    /**
     * Gets or sets a value indicating whether to enable direct stream.
     * @type {boolean}
     * @memberof PlaybackInfoDto
     */
    enableDirectStream?: boolean | null;
    /**
     * Gets or sets a value indicating whether to enable transcoding.
     * @type {boolean}
     * @memberof PlaybackInfoDto
     */
    enableTranscoding?: boolean | null;
    /**
     * Gets or sets a value indicating whether to enable video stream copy.
     * @type {boolean}
     * @memberof PlaybackInfoDto
     */
    allowVideoStreamCopy?: boolean | null;
    /**
     * Gets or sets a value indicating whether to allow audio stream copy.
     * @type {boolean}
     * @memberof PlaybackInfoDto
     */
    allowAudioStreamCopy?: boolean | null;
    /**
     * Gets or sets a value indicating whether to auto open the live stream.
     * @type {boolean}
     * @memberof PlaybackInfoDto
     */
    autoOpenLiveStream?: boolean | null;
}

/**
 * Check if a given object implements the PlaybackInfoDto interface.
 */
export function instanceOfPlaybackInfoDto(value: object): boolean {
    let isInstance = true;

    return isInstance;
}

export function PlaybackInfoDtoFromJSON(json: any): PlaybackInfoDto {
    return PlaybackInfoDtoFromJSONTyped(json, false);
}

export function PlaybackInfoDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): PlaybackInfoDto {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'userId': !exists(json, 'UserId') ? undefined : json['UserId'],
        'maxStreamingBitrate': !exists(json, 'MaxStreamingBitrate') ? undefined : json['MaxStreamingBitrate'],
        'startTimeTicks': !exists(json, 'StartTimeTicks') ? undefined : json['StartTimeTicks'],
        'audioStreamIndex': !exists(json, 'AudioStreamIndex') ? undefined : json['AudioStreamIndex'],
        'subtitleStreamIndex': !exists(json, 'SubtitleStreamIndex') ? undefined : json['SubtitleStreamIndex'],
        'maxAudioChannels': !exists(json, 'MaxAudioChannels') ? undefined : json['MaxAudioChannels'],
        'mediaSourceId': !exists(json, 'MediaSourceId') ? undefined : json['MediaSourceId'],
        'liveStreamId': !exists(json, 'LiveStreamId') ? undefined : json['LiveStreamId'],
        'deviceProfile': !exists(json, 'DeviceProfile') ? undefined : ClientCapabilitiesDtoDeviceProfileFromJSON(json['DeviceProfile']),
        'enableDirectPlay': !exists(json, 'EnableDirectPlay') ? undefined : json['EnableDirectPlay'],
        'enableDirectStream': !exists(json, 'EnableDirectStream') ? undefined : json['EnableDirectStream'],
        'enableTranscoding': !exists(json, 'EnableTranscoding') ? undefined : json['EnableTranscoding'],
        'allowVideoStreamCopy': !exists(json, 'AllowVideoStreamCopy') ? undefined : json['AllowVideoStreamCopy'],
        'allowAudioStreamCopy': !exists(json, 'AllowAudioStreamCopy') ? undefined : json['AllowAudioStreamCopy'],
        'autoOpenLiveStream': !exists(json, 'AutoOpenLiveStream') ? undefined : json['AutoOpenLiveStream'],
    };
}

export function PlaybackInfoDtoToJSON(value?: PlaybackInfoDto | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'UserId': value.userId,
        'MaxStreamingBitrate': value.maxStreamingBitrate,
        'StartTimeTicks': value.startTimeTicks,
        'AudioStreamIndex': value.audioStreamIndex,
        'SubtitleStreamIndex': value.subtitleStreamIndex,
        'MaxAudioChannels': value.maxAudioChannels,
        'MediaSourceId': value.mediaSourceId,
        'LiveStreamId': value.liveStreamId,
        'DeviceProfile': ClientCapabilitiesDtoDeviceProfileToJSON(value.deviceProfile),
        'EnableDirectPlay': value.enableDirectPlay,
        'EnableDirectStream': value.enableDirectStream,
        'EnableTranscoding': value.enableTranscoding,
        'AllowVideoStreamCopy': value.allowVideoStreamCopy,
        'AllowAudioStreamCopy': value.allowAudioStreamCopy,
        'AutoOpenLiveStream': value.autoOpenLiveStream,
    };
}

