/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';

export type DocsVersionPersistence = 'localStorage' | 'none';

// TODO improve types, use unions
export type NavbarItem = {
  type?: string | undefined;
  items?: NavbarItem[];
  label?: string;
};

export type NavbarLogo = {
  src: string;
  srcDark?: string;
  href?: string;
  target?: string;
  alt?: string;
};

// TODO improve
export type Navbar = {
  style: 'dark' | 'primary';
  hideOnScroll: boolean;
  title?: string;
  items: NavbarItem[];
  logo?: NavbarLogo;
};

export type FooterLinkItem = {
  label?: string;
  to?: string;
  href?: string;
  html?: string;
};
export type FooterLinks = {
  title?: string;
  items: FooterLinkItem[];
};
export type Footer = {
  style: 'light' | 'dark';
  logo?: {
    alt?: string;
    src?: string;
    srcDark?: string;
    href?: string;
  };
  copyright?: string;
  links: FooterLinks[];
};

export type ThemeConfig = {
  docs: {
    versionPersistence: DocsVersionPersistence;
  };

  // TODO we should complete this theme config type over time
  // and share it across all themes
  // and use it in the Joi validation schema?

  // TODO temporary types
  navbar: Navbar;
  colorMode: any;
  announcementBar: any;
  prism: any;
  footer: Footer | undefined;
  hideableSidebar: any;
};

export function useThemeConfig(): ThemeConfig {
  return useDocusaurusContext().siteConfig.themeConfig as ThemeConfig;
}
