import { TraktApiParamsExtended, TraktApiExtended } from './trakt-client.model.cjs'; import { Short, Any, EntityTypes } from './trakt-entity.model.cjs'; import { TraktEpisode } from './trakt-episode.model.cjs'; import { TraktMovie } from './trakt-movie.model.cjs'; import { TraktSeason } from './trakt-season.model.cjs'; import { TraktShow } from './trakt-show.model.cjs'; import { BaseSyncRequestItem } from './trakt-sync.model.cjs'; import '@dvcol/base-http-client'; import '@dvcol/common-utils/common/models'; import '@dvcol/common-utils/http/fetch'; import '../api/trakt-api.filters.cjs'; import './trakt-id.model.cjs'; import './trakt-image.model.cjs'; import './trakt-people.model.cjs'; type TraktCollectionMetadata = { media_type: 'digital' | 'bluray' | 'hddvd' | 'dvd' | 'vcd' | 'vhs' | 'betamax' | 'laserdisc'; resolution: 'uhd_4k' | 'hd_1080p' | 'hd_1080i' | 'hd_720p' | 'sd_480p' | 'sd_480i' | 'sd_576p' | 'sd_576i'; hdr: 'dolby_vision' | 'hdr10' | 'hdr10_plus' | 'hlg'; audio: 'dolby_digital' | 'dolby_digital_plus' | 'dolby_digital_plus_atmos' | 'dolby_truehd' | 'dolby_atmos' | 'dolby_prologic' | 'dts' | 'dts_ma' | 'dts_hr' | 'dts_x' | 'auro_3d' | 'mp3' | 'mp2' | 'aac' | 'lpcm' | 'ogg' | 'ogg_opus' | 'wma' | 'flac'; audio_channels: '1.0' | '2.0' | '2.1' | '3.0' | '3.1' | '4.0' | '4.1' | '5.0' | '5.1' | '5.1.2' | '5.1.4' | '6.1' | '7.1' | '7.1.2' | '7.1.4' | '9.1' | '10.1'; '3d': boolean; }; type TraktCollectionEpisode = { number: number; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ collected_at: string; } & (M extends 'metadata' ? { metadata: TraktCollectionMetadata; } : M extends Short ? Record : { metadata?: TraktCollectionMetadata; }); type TraktCollectionSeason = { number: number; episodes: TraktCollectionEpisode[]; }; type TraktCollectionShow = { last_collected_at: string; last_updated_at: string; show: TraktShow; seasons: TraktCollectionSeason[]; }; type TraktCollectionMovie = { collected_at: string; updated_at: string; movie: TraktMovie; } & (M extends 'metadata' ? { metadata: TraktCollectionMetadata; } : M extends Short ? Record : { metadata?: TraktCollectionMetadata; }); type TraktCollection = T extends 'movie' ? TraktCollectionMovie : T extends 'show' ? TraktCollectionShow : TraktCollectionMovie | TraktCollectionShow; type TraktCollectionRequestItem = { /** * UTC datetime when the item was collected. - Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) * Set to released to automatically use the inital release date + runtime (episodes only)). */ collected_at?: string; } & (M extends 'metadata' ? Partial & BaseSyncRequestItem : BaseSyncRequestItem); type TraktCollectionRequest = { movies?: TraktCollectionRequestItem<'movies', T>[]; shows?: TraktCollectionRequestItem<'shows', T>[]; seasons?: TraktCollectionRequestItem<'seasons', T>[]; episodes?: TraktCollectionRequestItem<'episodes', T>[]; }; type TraktCollectionAdded = { added: { movies: number; episodes: number; }; updated: { movies: number; episodes: number; }; existing: { movies: number; episodes: number; }; not_found: { movies: Pick[]; shows: Pick[]; seasons: Pick[]; episodes: Pick[]; }; }; type TraktCollectionRemoved = { deleted: { movies: number; episodes: number; }; not_found: { movies: Pick[]; shows: Pick[]; seasons: Pick[]; episodes: Pick[]; }; }; type TraktCollectionGetQuery = { type: 'movies' | 'shows'; } & TraktApiParamsExtended; export type { TraktCollection, TraktCollectionAdded, TraktCollectionEpisode, TraktCollectionGetQuery, TraktCollectionMetadata, TraktCollectionRemoved, TraktCollectionRequest, TraktCollectionRequestItem, TraktCollectionSeason };