/* 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 { DayOfWeek } from './DayOfWeek';
import {
    DayOfWeekFromJSON,
    DayOfWeekFromJSONTyped,
    DayOfWeekToJSON,
} from './DayOfWeek';
import type { DayPattern } from './DayPattern';
import {
    DayPatternFromJSON,
    DayPatternFromJSONTyped,
    DayPatternToJSON,
} from './DayPattern';
import type { KeepUntil } from './KeepUntil';
import {
    KeepUntilFromJSON,
    KeepUntilFromJSONTyped,
    KeepUntilToJSON,
} from './KeepUntil';

/**
 * Class SeriesTimerInfoDto.
 * @export
 * @interface CreateSeriesTimerRequest
 */
export interface CreateSeriesTimerRequest {
    /**
     * Gets or sets the Id of the recording.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    id?: string | null;
    /**
     * 
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    type?: string | null;
    /**
     * Gets or sets the server identifier.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    serverId?: string | null;
    /**
     * Gets or sets the external identifier.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    externalId?: string | null;
    /**
     * Gets or sets the channel id of the recording.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    channelId?: string;
    /**
     * Gets or sets the external channel identifier.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    externalChannelId?: string | null;
    /**
     * Gets or sets the channel name of the recording.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    channelName?: string | null;
    /**
     * 
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    channelPrimaryImageTag?: string | null;
    /**
     * Gets or sets the program identifier.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    programId?: string | null;
    /**
     * Gets or sets the external program identifier.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    externalProgramId?: string | null;
    /**
     * Gets or sets the name of the recording.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    name?: string | null;
    /**
     * Gets or sets the description of the recording.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    overview?: string | null;
    /**
     * Gets or sets the start date of the recording, in UTC.
     * @type {Date}
     * @memberof CreateSeriesTimerRequest
     */
    startDate?: Date;
    /**
     * Gets or sets the end date of the recording, in UTC.
     * @type {Date}
     * @memberof CreateSeriesTimerRequest
     */
    endDate?: Date;
    /**
     * Gets or sets the name of the service.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    serviceName?: string | null;
    /**
     * Gets or sets the priority.
     * @type {number}
     * @memberof CreateSeriesTimerRequest
     */
    priority?: number;
    /**
     * Gets or sets the pre padding seconds.
     * @type {number}
     * @memberof CreateSeriesTimerRequest
     */
    prePaddingSeconds?: number;
    /**
     * Gets or sets the post padding seconds.
     * @type {number}
     * @memberof CreateSeriesTimerRequest
     */
    postPaddingSeconds?: number;
    /**
     * Gets or sets a value indicating whether this instance is pre padding required.
     * @type {boolean}
     * @memberof CreateSeriesTimerRequest
     */
    isPrePaddingRequired?: boolean;
    /**
     * Gets or sets the Id of the Parent that has a backdrop if the item does not have one.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    parentBackdropItemId?: string | null;
    /**
     * Gets or sets the parent backdrop image tags.
     * @type {Array<string>}
     * @memberof CreateSeriesTimerRequest
     */
    parentBackdropImageTags?: Array<string> | null;
    /**
     * Gets or sets a value indicating whether this instance is post padding required.
     * @type {boolean}
     * @memberof CreateSeriesTimerRequest
     */
    isPostPaddingRequired?: boolean;
    /**
     * 
     * @type {KeepUntil}
     * @memberof CreateSeriesTimerRequest
     */
    keepUntil?: KeepUntil;
    /**
     * Gets or sets a value indicating whether [record any time].
     * @type {boolean}
     * @memberof CreateSeriesTimerRequest
     */
    recordAnyTime?: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof CreateSeriesTimerRequest
     */
    skipEpisodesInLibrary?: boolean;
    /**
     * Gets or sets a value indicating whether [record any channel].
     * @type {boolean}
     * @memberof CreateSeriesTimerRequest
     */
    recordAnyChannel?: boolean;
    /**
     * 
     * @type {number}
     * @memberof CreateSeriesTimerRequest
     */
    keepUpTo?: number;
    /**
     * Gets or sets a value indicating whether [record new only].
     * @type {boolean}
     * @memberof CreateSeriesTimerRequest
     */
    recordNewOnly?: boolean;
    /**
     * Gets or sets the days.
     * @type {Array<DayOfWeek>}
     * @memberof CreateSeriesTimerRequest
     */
    days?: Array<DayOfWeek> | null;
    /**
     * 
     * @type {DayPattern}
     * @memberof CreateSeriesTimerRequest
     */
    dayPattern?: DayPattern | null;
    /**
     * Gets or sets the image tags.
     * @type {{ [key: string]: string; }}
     * @memberof CreateSeriesTimerRequest
     */
    imageTags?: { [key: string]: string; } | null;
    /**
     * Gets or sets the parent thumb item id.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    parentThumbItemId?: string | null;
    /**
     * Gets or sets the parent thumb image tag.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    parentThumbImageTag?: string | null;
    /**
     * Gets or sets the parent primary image item identifier.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    parentPrimaryImageItemId?: string | null;
    /**
     * Gets or sets the parent primary image tag.
     * @type {string}
     * @memberof CreateSeriesTimerRequest
     */
    parentPrimaryImageTag?: string | null;
}

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

    return isInstance;
}

export function CreateSeriesTimerRequestFromJSON(json: any): CreateSeriesTimerRequest {
    return CreateSeriesTimerRequestFromJSONTyped(json, false);
}

export function CreateSeriesTimerRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateSeriesTimerRequest {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'id': !exists(json, 'Id') ? undefined : json['Id'],
        'type': !exists(json, 'Type') ? undefined : json['Type'],
        'serverId': !exists(json, 'ServerId') ? undefined : json['ServerId'],
        'externalId': !exists(json, 'ExternalId') ? undefined : json['ExternalId'],
        'channelId': !exists(json, 'ChannelId') ? undefined : json['ChannelId'],
        'externalChannelId': !exists(json, 'ExternalChannelId') ? undefined : json['ExternalChannelId'],
        'channelName': !exists(json, 'ChannelName') ? undefined : json['ChannelName'],
        'channelPrimaryImageTag': !exists(json, 'ChannelPrimaryImageTag') ? undefined : json['ChannelPrimaryImageTag'],
        'programId': !exists(json, 'ProgramId') ? undefined : json['ProgramId'],
        'externalProgramId': !exists(json, 'ExternalProgramId') ? undefined : json['ExternalProgramId'],
        'name': !exists(json, 'Name') ? undefined : json['Name'],
        'overview': !exists(json, 'Overview') ? undefined : json['Overview'],
        'startDate': !exists(json, 'StartDate') ? undefined : (new Date(json['StartDate'])),
        'endDate': !exists(json, 'EndDate') ? undefined : (new Date(json['EndDate'])),
        'serviceName': !exists(json, 'ServiceName') ? undefined : json['ServiceName'],
        'priority': !exists(json, 'Priority') ? undefined : json['Priority'],
        'prePaddingSeconds': !exists(json, 'PrePaddingSeconds') ? undefined : json['PrePaddingSeconds'],
        'postPaddingSeconds': !exists(json, 'PostPaddingSeconds') ? undefined : json['PostPaddingSeconds'],
        'isPrePaddingRequired': !exists(json, 'IsPrePaddingRequired') ? undefined : json['IsPrePaddingRequired'],
        'parentBackdropItemId': !exists(json, 'ParentBackdropItemId') ? undefined : json['ParentBackdropItemId'],
        'parentBackdropImageTags': !exists(json, 'ParentBackdropImageTags') ? undefined : json['ParentBackdropImageTags'],
        'isPostPaddingRequired': !exists(json, 'IsPostPaddingRequired') ? undefined : json['IsPostPaddingRequired'],
        'keepUntil': !exists(json, 'KeepUntil') ? undefined : KeepUntilFromJSON(json['KeepUntil']),
        'recordAnyTime': !exists(json, 'RecordAnyTime') ? undefined : json['RecordAnyTime'],
        'skipEpisodesInLibrary': !exists(json, 'SkipEpisodesInLibrary') ? undefined : json['SkipEpisodesInLibrary'],
        'recordAnyChannel': !exists(json, 'RecordAnyChannel') ? undefined : json['RecordAnyChannel'],
        'keepUpTo': !exists(json, 'KeepUpTo') ? undefined : json['KeepUpTo'],
        'recordNewOnly': !exists(json, 'RecordNewOnly') ? undefined : json['RecordNewOnly'],
        'days': !exists(json, 'Days') ? undefined : (json['Days'] === null ? null : (json['Days'] as Array<any>).map(DayOfWeekFromJSON)),
        'dayPattern': !exists(json, 'DayPattern') ? undefined : DayPatternFromJSON(json['DayPattern']),
        'imageTags': !exists(json, 'ImageTags') ? undefined : json['ImageTags'],
        'parentThumbItemId': !exists(json, 'ParentThumbItemId') ? undefined : json['ParentThumbItemId'],
        'parentThumbImageTag': !exists(json, 'ParentThumbImageTag') ? undefined : json['ParentThumbImageTag'],
        'parentPrimaryImageItemId': !exists(json, 'ParentPrimaryImageItemId') ? undefined : json['ParentPrimaryImageItemId'],
        'parentPrimaryImageTag': !exists(json, 'ParentPrimaryImageTag') ? undefined : json['ParentPrimaryImageTag'],
    };
}

export function CreateSeriesTimerRequestToJSON(value?: CreateSeriesTimerRequest | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'Id': value.id,
        'Type': value.type,
        'ServerId': value.serverId,
        'ExternalId': value.externalId,
        'ChannelId': value.channelId,
        'ExternalChannelId': value.externalChannelId,
        'ChannelName': value.channelName,
        'ChannelPrimaryImageTag': value.channelPrimaryImageTag,
        'ProgramId': value.programId,
        'ExternalProgramId': value.externalProgramId,
        'Name': value.name,
        'Overview': value.overview,
        'StartDate': value.startDate === undefined ? undefined : (value.startDate.toISOString()),
        'EndDate': value.endDate === undefined ? undefined : (value.endDate.toISOString()),
        'ServiceName': value.serviceName,
        'Priority': value.priority,
        'PrePaddingSeconds': value.prePaddingSeconds,
        'PostPaddingSeconds': value.postPaddingSeconds,
        'IsPrePaddingRequired': value.isPrePaddingRequired,
        'ParentBackdropItemId': value.parentBackdropItemId,
        'ParentBackdropImageTags': value.parentBackdropImageTags,
        'IsPostPaddingRequired': value.isPostPaddingRequired,
        'KeepUntil': KeepUntilToJSON(value.keepUntil),
        'RecordAnyTime': value.recordAnyTime,
        'SkipEpisodesInLibrary': value.skipEpisodesInLibrary,
        'RecordAnyChannel': value.recordAnyChannel,
        'KeepUpTo': value.keepUpTo,
        'RecordNewOnly': value.recordNewOnly,
        'Days': value.days === undefined ? undefined : (value.days === null ? null : (value.days as Array<any>).map(DayOfWeekToJSON)),
        'DayPattern': DayPatternToJSON(value.dayPattern),
        'ImageTags': value.imageTags,
        'ParentThumbItemId': value.parentThumbItemId,
        'ParentThumbImageTag': value.parentThumbImageTag,
        'ParentPrimaryImageItemId': value.parentPrimaryImageItemId,
        'ParentPrimaryImageTag': value.parentPrimaryImageTag,
    };
}

