import type {
  ContentListPage, ContentListPageBody, Navigation, NavigationPageBody, PrimaryList, PrimaryListPageBody,
  ProductListParams, ProductParams, RecommendationListPage, RecommendationListPageBody
} from './common/mod.ts';


export interface LandingPageParams extends ProductParams, ProductListParams {
  /** A search phrase used to further refine the result */
  q?: string;
  /**
   * Required if the `Referer` header is missing, used to identify the current page.
   * Any string is accepted, but using URLs is a good practice to follow.
   */
  pageReference?: string;
  /**
   * Whether or not the response should include a navigation object (including breadcrumbs),
   * i.e. when navigation is handled through Elevate. Defaults to false if omitted.
   */
  includeNavigation?: boolean;
}

export interface LandingPageBody extends PrimaryListPageBody,
  NavigationPageBody, RecommendationListPageBody, ContentListPageBody {}

export interface LandingPage extends RecommendationListPage, ContentListPage {
  /** A product list with facets, sort orders and hit count */
  primaryList?: PrimaryList;
  /** Navigation, can be `undefined` if disabled */
  navigation?: Navigation;
  /** String key/value map with custom data added via the Admin page import API */
  customData: Record<string, string>;
  /**	Is `true` if the returned page's settings were overridden from the Elevate API or the Elevate app */
  published: boolean;
  /** SEO information */
  seo: SearchEngineOptimization;
}

export interface SearchEngineOptimization {
  /** Preamble text for the current page */
  preamble?: string;
  /** Description for the current page, use with: `<meta type="description" content="{VALUE}">` */
  metaDescription?: string;
  /** Title for the current page, use with: `<title>{VALUE}</title>` */
  pageTitle?: string;
  /** Preferred URL for the current page, use with `<link rel="canonical" href="{VALUE}">` */
  canonicalPath?: string;

  /** Main heading for the current page */
  pageHeading?: string;
}

