import { BaseEndpoint } from './base'; import { MultiSearchResult, Search } from '../types/search'; import { Collection, Company, LanguageOption, Movie, PageOption, Person, RegionOption, TV, } from '../types'; const BASE_SEARCH = '/search'; export interface SearchOptions { query: string; page?: number; } export interface MovieSearchOptions extends SearchOptions, LanguageOption, PageOption, RegionOption { include_adult?: boolean; year?: number; primary_release_year?: number; } export interface CollectionSearchOptions extends SearchOptions, LanguageOption, PageOption, RegionOption { include_adult?: boolean; } export interface TvSearchOptions extends SearchOptions, LanguageOption, PageOption { include_adult?: boolean; year?: number; first_air_date_year?: number; } export interface PeopleSearchOptions extends SearchOptions, LanguageOption, PageOption { include_adult?: boolean; } export interface MultiSearchOptions extends SearchOptions, LanguageOption, PageOption { include_adult?: boolean; } export class SearchEndpoint extends BaseEndpoint { constructor(protected readonly accessToken: string) { super(accessToken); } async companies(options: SearchOptions): Promise> { return await this.api.get>( `${BASE_SEARCH}/company`, options ); } async collections(options: SearchOptions): Promise> { return await this.api.get>( `${BASE_SEARCH}/collection`, options ); } async keywords( options: SearchOptions ): Promise> { return await this.api.get>( `${BASE_SEARCH}/keyword`, options ); } async movies(options: MovieSearchOptions): Promise> { return await this.api.get>(`${BASE_SEARCH}/movie`, options); } async people(options: PeopleSearchOptions): Promise> { return await this.api.get>(`${BASE_SEARCH}/person`, options); } async tvShows(options: TvSearchOptions): Promise> { return await this.api.get>(`${BASE_SEARCH}/tv`, options); } async multi(options: MultiSearchOptions): Promise> { return await this.api.get>( `${BASE_SEARCH}/multi`, options ); } }