/**@module tmdb-js */
const {AccountSection} = require('./sections/types/account');
const {Authenticator} = require('./authentication/authentication');
const {CollectionSection} = require('./sections/types/collection');
const {CompanySection} = require('./sections/types/company');
const {ConfigurationSection} = require('./sections/types/configuration');
const {CreditSection} = require('./sections/types/credit');
const {DiscoverSection} = require('./sections/types/discover');
const {FindSection} = require('./sections/types/find');
const {GenreSection} = require('./sections/types/genre');
const {GuestSessionSection} = require('./sections/types/guest_session');
const {KeywordSection} = require('./sections/types/keyword');
const {ListSection} = require('./sections/types/list');
const {MovieSection} = require('./sections/types/movie');
const {NetworkSection} = require('./sections/types/network');
const {PeopleSection} = require('./sections/types/people');
const {ReviewSection} = require('./sections/types/review');
const {SearchSection} = require('./sections/types/search');
const {TmdbQuerier} = require('./api/tmdb_querier');
const {TrendingSection} = require('./sections/types/trending');
const {TvShowSection} = require('./sections/types/tv_show');
const {WatchProvidersSection} = require('./sections/types/watch_provider');
/**
* Can handle and get TMDB data.
*/
exports.TmdbClient = class extends TmdbQuerier {
/**
* Sets properties.
* @param {string} apiKey The TMDb API key.
* @param {string} language The natural language of queries, the default is "en-US".
*/
constructor(apiKey, language = "en-US") {
super(apiKey, language);
}
/**
* Gets an AccountSection instance which can
* be used to get and handle account data.
*
* @returns {exports.AccountSection} An AccountSection instance.
*/
getAccountSection() {
return new AccountSection(this._apiKey, this._language);
}
/**
* Gets an Authenticator instance which can
* be used to handle TMDb authentications.
*
* @returns {exports.Authenticator} An Authenticator instance.
*/
getAuthenticator() {
return new Authenticator(this._apiKey);
}
/**
* Gets a CollectionSection instance which can
* be used to get collection data.
*
* @returns {exports.CollectionSection} A CollectionSection instance.
*/
getCollectionSection() {
return new CollectionSection(this._apiKey, this._language);
}
/**
* Gets a CompanySection instance which can
* be used to get company data.
*
* @returns {exports.CompanySection} A CompanySection instance.
*/
getCompanySection() {
return new CompanySection(this._apiKey, this._language);
}
/**
* Gets a ConfigurationSection instance which can
* be used to get TMDb configuration data.
*
* @returns {exports.ConfigurationSection} A ConfigurationSection instance.
*/
getConfigurationSection() {
return new ConfigurationSection(this._apiKey, this._language);
}
/**
* Gets a CreditSection instance which can
* be used to get credit data.
*
* @returns {exports.CreditSection} A CreditSection instance.
*/
getCreditSection() {
return new CreditSection(this._apiKey, this._language);
}
/**
* Gets a DiscoverSection instance which can
* be used to discover media data on TMDb.
*
* @returns {exports.DiscoverSection} A DiscoverSection instance.
*/
getDiscoverSection() {
return new DiscoverSection(this._apiKey, this._language);
}
/**
* Gets a FindSection instance which can
* be used to find media data based on external
* source IDs via TMDb.
*
* @param externalSource The external source (see tmdb_utils.externalSources).
*
* @returns {exports.FindSection} A FindSection instance based on the passed external source.
*/
getFindSection(externalSource) {
return new FindSection(externalSource, this._apiKey, this._language);
}
/**
* Gets a GenreSection instance which can be used
* to get genre data.
*
* @returns {exports.GenreSection} A GenreSection instance.
*/
getGenreSection() {
return new GenreSection(this._apiKey, this._language);
}
/**
* Gets a GuestSessionSection which can be used
* to get guest session data.
*
* @returns {exports.GuestSessionSection} A GuestSessionSection instance.
*/
getGuestSessionSection() {
return new GuestSessionSection(this._apiKey, this._language);
}
/**
* Gets a KeywordSection instance which can be used
* to get keyword data.
*
* @returns {exports.KeywordSection} A KeywordSection instance.
*/
getKeywordSection() {
return new KeywordSection(this._apiKey, this._language);
}
/**
* Gets a ListSection instance which can be used
* to get and handle list data.
*
* @returns {exports.ListSection} A ListSection instance.
*/
getListSection() {
return new ListSection(this._apiKey, this._language);
}
/**
* Gets a MovieSection instance which can be used
* to handle and get movie data on TMDb.
*
* @returns {exports.MovieSection} A MovieSection instance.
*/
getMovieSection() {
return new MovieSection(this._apiKey, this._language);
}
/**
* Gets a NetworkSection instance which can be used to get network data.
*
* @returns {exports.NetworkSection} A NetworkSection instance.
*/
getNetworkSection() {
return new NetworkSection(this._apiKey, this._language);
}
/**
* Gets a PeopleSection instance which can be used
* to get data about people.
*
* @returns {exports.PeopleSection} A PeopleSection instance.
*/
getPeopleSection() {
return new PeopleSection(this._apiKey, this._language);
}
/**
* Gets a ReviewSection instance which can be used to get review data.
*
* @returns {exports.ReviewSection} A ReviewSection instance.
*/
getReviewSection() {
return new ReviewSection(this._apiKey, this._language);
}
/**
* Gets a SearchSection instance which can be used to search TMDb.
*
* @returns {exports.SearchSection} A SearchSection instance.
*/
getSearchSection() {
return new SearchSection(this._apiKey, this._language);
}
/**
* Gets a TrendingSection which can be used to get trending media from TMDb.
* @param {string} timeWindow The time window (see tmdb_utils.timeWindows).
*
* @returns {exports.TrendingSection} A TrendingSection instance based on the passed time window.
*/
getTrendingSection(timeWindow) {
return new TrendingSection(timeWindow, this._apiKey, this._language);
}
/**
* Gets a TvShowSection instance which can be used
* to handle and get TV show data on TMDb.
*
* @returns {exports.TvShowSection} A TvShowSection instance.
*/
getTvShowSection() {
return new TvShowSection(this._apiKey, this._language)
}
/**
* Gets a WatchProvidersSection instance which can be used
* to get watch provider data from TMDb.
*
* @returns {exports.WatchProvidersSection} A WatchProvidersSection instance.
*/
getWatchProvidersSection() {
return new WatchProvidersSection(this._apiKey, this._language);
}
};