// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
require('dotenv').config()

const darkCodeTheme = require('prism-react-renderer/themes/dracula')
const path = require('path')

/** @type {import('@docusaurus/types').Config} */
const config = {
  title: 'Jan',
  tagline: 'Run your own AI',
  favicon: 'img/favicon.ico',

  // Set the production url of your site here
  url: 'https://jan.ai',
  // Set the /<baseUrl>/ pathname under which your site is served
  // For GitHub pages deployment, it is often '/<projectName>/'
  baseUrl: '/',

  // GitHub pages deployment config.
  // If you aren't using GitHub pages, you don't need these.
  organizationName: 'janhq', // Usually your GitHub org/user name.
  projectName: 'jan', // Usually your repo name.

  onBrokenLinks: 'warn',
  onBrokenMarkdownLinks: 'warn',
  trailingSlash: true,
  // Even if you don't use internalization, you can use this field to set useful
  // metadata like html lang. For example, if your site is Chinese, you may want
  // to replace "en" with "zh-Hans".
  i18n: {
    defaultLocale: 'en',
    locales: ['en'],
  },

  markdown: {
    mermaid: true,
  },

  noIndex: false,

  // Plugins we added
  plugins: [
    'docusaurus-plugin-sass',
    async function myPlugin(context, options) {
      return {
        name: 'docusaurus-tailwindcss',
        configurePostCss(postcssOptions) {
          // Appends TailwindCSS and AutoPrefixer.
          postcssOptions.plugins.push(require('tailwindcss'))
          postcssOptions.plugins.push(require('autoprefixer'))
          return postcssOptions
        },
      }
    },
    [
      'posthog-docusaurus',
      {
        apiKey: process.env.POSTHOG_PROJECT_API_KEY || 'XXX',
        appUrl: process.env.POSTHOG_APP_URL || 'XXX', // optional
        enableInDevelopment: false, // optional
      },
    ],
    [
      '@docusaurus/plugin-client-redirects',
      {
        redirects: [
          {
            from: '/troubleshooting/failed-to-fetch',
            to: '/guides/error-codes/something-amiss/',
          },
          {
            from: '/guides/troubleshooting/gpu-not-used/',
            to: '/guides/common-error/not-using-gpu/',
          },
          {
            from: '/guides/troubleshooting/',
            to: '/guides/error-codes/',
          },
          {
            from: '/troubleshooting/stuck-on-broken-build/',
            to: '/guides/common-error/broken-build/',
          },
          {
            from: '/guides/troubleshooting/',
            to: '/guides/error-codes/',
          },
          {
            from: '/troubleshooting/somethings-amiss/',
            to: '/guides/error-codes/something-amiss/',
          },
          {
            from: '/troubleshooting/how-to-get-error-logs/',
            to: '/guides/error-codes/how-to-get-error-logs/',
          },
          {
            from: '/troubleshooting/permission-denied/',
            to: '/guides/error-codes/permission-denied/',
          },
          {
            from: '/troubleshooting/unexpected-token/',
            to: '/guides/error-codes/unexpected-token/',
          },
          {
            from: '/troubleshooting/undefined-issue/',
            to: '/guides/error-codes/undefined-issue/',
          },
          {
            from: '/install/',
            to: '/guides/install/',
          },
          {
            from: '/guides/using-models/',
            to: '/guides/models-setup/',
          },
          {
            from: '/guides/using-extensions/',
            to: '/guides/extensions/',
          },
        ],
      },
    ],

    //To input custom Plugin
    path.resolve(__dirname, 'plugins', 'changelog-plugin'),
    [
      '@scalar/docusaurus',
      {
        label: '',
        route: '/api-reference',
        configuration: {
          spec: {
            url: 'https://raw.githubusercontent.com/janhq/jan/dev/docs/openapi/jan.json',
          },
        },
      },
    ],
  ],

  // The classic preset will relay each option entry to the respective sub plugin/theme.
  presets: [
    [
      '@docusaurus/preset-classic',
      {
        // Will be passed to @docusaurus/plugin-content-docs (false to disable)
        docs: {
          routeBasePath: '/',
          sidebarPath: require.resolve('./sidebars.js'),
          editUrl: 'https://github.com/janhq/jan/tree/dev/docs',
          showLastUpdateAuthor: true,
          showLastUpdateTime: true,
        },
        // Will be passed to @docusaurus/plugin-content-sitemap (false to disable)
        sitemap: {
          changefreq: 'daily',
          priority: 1.0,
          ignorePatterns: ['/tags/**'],
          filename: 'sitemap.xml',
        },
        // Will be passed to @docusaurus/plugin-content-blog (false to disable)
        blog: {
          blogSidebarTitle: 'All Posts',
          blogSidebarCount: 'ALL',
        },
        // Will be passed to @docusaurus/theme-classic.
        theme: {
          customCss: require.resolve('./src/styles/main.scss'),
        },
        // GTM is always inactive in development and only active in production to avoid polluting the analytics statistics.
        googleTagManager: {
          containerId: process.env.GTM_ID || 'XXX',
        },
        // Will be passed to @docusaurus/plugin-content-pages (false to disable)
        // pages: {},
      },
    ],
    // Redoc preset
    [
      'redocusaurus',
      {
        specs: [
          {
            spec: 'openapi/jan.yaml', // can be local file, url, or parsed json object
            route: '/api-reference-1.0/', // path where to render docs
          },
        ],
        theme: {
          primaryColor: '#1a73e8',
          primaryColorDark: '#1a73e8',
          options: {
            requiredPropsFirst: true,
            noAutoAuth: true,
            hideDownloadButton: true,
          },
        },
      },
    ],
  ],

  // Docs: https://docusaurus.io/docs/api/themes/configuration
  themeConfig: {
    image: 'img/og-image.png',
    // Only for react live
    liveCodeBlock: {
      playgroundPosition: 'bottom',
    },
    docs: {
      sidebar: {
        hideable: true,
        autoCollapseCategories: false,
      },
    },
    // Algolia Search Configuration
    algolia: {
      appId: process.env.ALGOLIA_APP_ID || 'XXX',
      apiKey: process.env.ALGOLIA_API_KEY || 'XXX',
      indexName: 'jan_docs',
      contextualSearch: true,
      insights: true,
    },
    // SEO Docusarus
    metadata: [
      {
        name: 'description',
        content: `Jan turns your computer into an AI machine by running LLMs locally on your computer. It's a privacy-focus, local-first, open-source solution.`,
      },
      {
        name: 'keywords',
        content:
          'Jan AI,  Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ',
      },
      { name: 'robots', content: 'index, follow' },
      {
        property: 'og:title',
        content: 'Jan AI | Rethink the Computer',
      },
      {
        property: 'og:description',
        content: `Jan turns your computer into an AI machine by running LLMs locally on your computer. It's a privacy-focus, local-first, open-source solution.`,
      },
      {
        property: 'og:image',
        content: 'https://jan.ai/img/og-image.png',
      },
      { property: 'og:type', content: 'website' },
      { property: 'twitter:card', content: 'summary_large_image' },
      { property: 'twitter:site', content: '@janframework' },
      {
        property: 'twitter:title',
        content: 'Jan AI | Rethink the Computer',
      },
      {
        property: 'twitter:description',
        content: `Jan turns your computer into an AI machine by running LLMs locally on your computer. It's a privacy-focus, local-first, open-source solution.`,
      },
      {
        property: 'twitter:image',
        content: 'https://jan.ai/img/og-image.png',
      },
    ],
    headTags: [
      // Declare a <link> preconnect tag
      {
        tagName: 'link',
        attributes: {
          rel: 'preconnect',
          href: 'https://jan.ai/',
        },
      },
      // Declare some json-ld structured data
      {
        tagName: 'script',
        attributes: {
          type: 'application/ld+json',
        },
        innerHTML: JSON.stringify({
          '@context': 'https://schema.org/',
          '@type': 'localAI',
          'name': 'Jan',
          'description': `Jan turns your computer into an AI machine by running LLMs locally on your computer. It's a privacy-focus, local-first, open-source solution.`,
          'keywords':
            'Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ',
          'applicationCategory': 'BusinessApplication',
          'operatingSystem': 'Multiple',
          'url': 'https://jan.ai/',
        }),
      },
    ],
    navbar: {
      title: 'Jan',
      logo: {
        alt: 'Jan Logo',
        src: 'img/logo.svg',
      },
      items: [
        // Navbar Left
        // {
        //   type: "docSidebar",
        //   sidebarId: "aboutSidebar",
        //   position: "left",
        //   label: "About",
        // },
        {
          type: 'dropdown',
          label: 'About',
          position: 'left',
          items: [
            {
              type: 'doc',
              label: 'What is Jan?',
              docId: 'about/about',
            },
            {
              type: 'doc',
              label: 'Who we are',
              docId: 'team/team',
            },
            {
              type: 'doc',
              label: 'Wall of love',
              docId: 'wall-of-love',
            },
          ],
        },
        {
          type: 'docSidebar',
          sidebarId: 'productSidebar',
          positionL: 'left',
          label: 'Product',
        },
        {
          type: 'docSidebar',
          sidebarId: 'ecosystemSidebar',
          position: 'left',
          label: 'Ecosystem',
        },
        {
          to: 'download',
          position: 'left',
          label: 'Download',
        },
        // {
        //   type: "docSidebar",
        //   sidebarId: "pricingSidebar",
        //   positionl: "left",
        //   label: "Pricing",
        // },
        // Navbar right
        {
          type: 'dropdown',
          label: 'Docs',
          to: 'docs',
          position: 'right',
          items: [
            {
              type: 'docSidebar',
              sidebarId: 'guidesSidebar',
              label: 'Guides',
            },
            {
              type: 'docSidebar',
              sidebarId: 'developerSidebar',
              label: 'Developer',
            },
            {
              to: '/api-reference',
              label: 'API Reference',
            },
            {
              type: 'docSidebar',
              sidebarId: 'releasesSidebar',
              label: 'Changelog',
            },
            // {
            //   type: "docSidebar",
            //   sidebarId: "docsSidebar",
            //   label: "Framework",
            // },
          ],
        },
        {
          to: 'blog',
          label: 'Blog',
          position: 'right',
        },
      ],
    },
    prism: {
      theme: darkCodeTheme,
      darkTheme: darkCodeTheme,
      additionalLanguages: [
        'python',
        'powershell',
        'bash',
        'json',
        'javascript',
        'jsx',
      ],
    },
    colorMode: {
      defaultMode: 'light',
      disableSwitch: false,
      respectPrefersColorScheme: false,
    },
  },

  // Put your custom environment here
  customFields: {
    apiKeyBrevo: process.env.API_KEY_BREVO,
  },

  themes: ['@docusaurus/theme-live-codeblock', '@docusaurus/theme-mermaid'],
}

module.exports = config
