import type { ApiClient } from "@promobase/sdk-runtime"; import { Cursor } from "@promobase/sdk-runtime"; import { metaPagination } from "../../pagination.ts"; import type { AppLinksFields } from "./app-links.ts"; import type { CatalogItemAppLinksFields } from "./catalog-item-app-links.ts"; import type { CatalogItemChannelsToIntegrityStatusFields } from "./catalog-item-channels-to-integrity-status.ts"; import type { DynamicVideoMetadataFields } from "./dynamic-video-metadata.ts"; import type { HotelRoomFields } from "./hotel-room.ts"; import type { OverrideDetailsFields } from "./override-details.ts"; import type { HotelImageFetchStatus, HotelVisibility } from "../enums.ts"; export interface HotelFields { address: string; applinks: CatalogItemAppLinksFields; brand: string; category: string; currency: string; custom_label_0: string; custom_label_1: string; custom_label_2: string; custom_label_3: string; custom_label_4: string; custom_number_0: number; custom_number_1: number; custom_number_2: number; custom_number_3: number; custom_number_4: number; description: string; guest_ratings: string; hotel_id: string; id: string; image_fetch_status: HotelImageFetchStatus; images: string[]; lowest_base_price: string; loyalty_program: string; margin_level: number; name: string; phone: string; product_priority_0: number; product_priority_1: number; product_priority_2: number; product_priority_3: number; product_priority_4: number; sale_price: string; sanitized_images: string[]; star_rating: number; tags: string[]; unit_price: Record; url: string; visibility: HotelVisibility; } export interface HotelListOverrideDetailsParams { keys?: string[]; type?: string; [key: string]: unknown; } export interface HotelUpdateParams { address?: Record; applinks?: Record; base_price?: number; brand?: string; currency?: string; description?: string; guest_ratings?: Record[]; images?: Record[]; name?: string; phone?: string; star_rating?: number; url?: string; [key: string]: unknown; } export function hotelNode(client: ApiClient, id: string) { return { __path: id, __brand: undefined as unknown as HotelFields, get: (opts: { fields: F; params?: Record }) => client.get>(`${id}`, opts), update: (params: HotelUpdateParams) => client.post(`${id}`, params as Record), delete: () => client.delete(`${id}`, {}), channelsToIntegrityStatus: (opts: { fields: F; params?: Record }) => new Cursor>(client, `${id}/channels_to_integrity_status`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), hotelRooms: (opts: { fields: F; params?: Record }) => new Cursor>(client, `${id}/hotel_rooms`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), overrideDetails: (opts: { fields: F; params?: HotelListOverrideDetailsParams }) => new Cursor>(client, `${id}/override_details`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), videosMetadata: (opts: { fields: F; params?: Record }) => new Cursor>(client, `${id}/videos_metadata`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), }; }