const { execSync } = require("child_process");
const path = require("path");
const theme = require("./src/theme/prism/themes/github");
const darkTheme = require("./src/theme/prism/themes/github-dark-dimmed");
const { releaseVersions } = require("./zmk-release-versions.json");

const gitBranch =
  process.env.BRANCH ||
  execSync("git branch --show-current", { encoding: "utf-8" }).trim();
const isDevelopmentVersion =
  gitBranch === "main" || !/^v\d+\.\d+-branch$/.test(gitBranch);
const versionNavbarItems = [
  {
    label: "Pre-Release",
    description: "Current active development branch (main)",
    href: "https://zmk.dev/docs/",
  },
  ...releaseVersions.map((r) => ({
    label: "v" + r,
    description: "Stable release v" + r,
    href: `https://v${r.replaceAll(".", "-")}-branch.zmk.dev/docs/`,
  })),
];

const versionDropDownLabel = (
  isDevelopmentVersion
    ? versionNavbarItems[0]
    : versionNavbarItems.find((item) => {
        return item.label === gitBranch.replace("-branch", "");
      })
).label;

module.exports = {
  title: "ZMK Firmware",
  tagline: "Modern, open source keyboard firmware",
  url: "https://zmk.dev",
  baseUrl: "/",
  favicon: "img/favicon.ico",
  trailingSlash: "false",
  organizationName: "zmkfirmware", // Usually your GitHub org/user name.
  projectName: "zmk", // Usually your repo name.
  customFields: {
    isDevelopmentVersion,
    releaseVersions,
  },
  plugins: [
    "@docusaurus/theme-mermaid",
    path.resolve(__dirname, "src/docusaurus-tree-sitter-plugin"),
    path.resolve(__dirname, "src/hardware-metadata-collection-plugin"),
    path.resolve(__dirname, "src/hardware-metadata-static-plugin"),
    path.resolve(__dirname, "src/hardware-schema-typescript-plugin"),
  ],
  themeConfig: {
    colorMode: {
      respectPrefersColorScheme: true,
    },
    prism: {
      additionalLanguages: [
        "bash",
        "c",
        "cmake",
        "ini",
        "linker-script",
        "log",
        "powershell",
        "diff",
      ],
      theme,
      darkTheme,
    },
    // sidebarCollapsible: false,
    navbar: {
      title: "ZMK Firmware",
      logo: {
        alt: "ZMK Logo",
        src: "img/zmk_logo.svg",
      },
      items: [
        {
          to: "docs",
          activeBasePath: "docs",
          label: "Docs",
          position: "left",
        },
        isDevelopmentVersion
          ? { to: "blog", label: "Blog", position: "left" }
          : { href: "https://zmk.dev/blog", label: "Blog", position: "left" },
        {
          type: "dropdown",
          label: "Tools",
          position: "left",
          items: [
            {
              to: "power-profiler",
              label: "Power Profiler",
            },
            {
              to: "keymap-upgrader",
              label: "Keymap Upgrader",
            },
          ],
        },
        {
          type: "dropdown",
          label: versionDropDownLabel,
          position: "right",
          items: versionNavbarItems,
        },
        {
          href: "https://zmk.studio/",
          label: "ZMK Studio",
          position: "right",
        },
        {
          href: "https://github.com/zmkfirmware/zmk",
          "aria-label": "ZMK GitHub Repository",
          className: "header-github-link",
          position: "right",
        },
      ],
    },
    footer: {
      style: "dark",
      links: [
        {
          title: "Docs",
          items: [
            {
              label: "Getting Started",
              to: "docs/",
            },
            {
              label: "Development",
              to: "docs/development/contributing/clean-room",
            },
          ],
        },
        {
          title: "Community",
          items: [
            //   {
            //     label: "Stack Overflow",
            //     href: "https://stackoverflow.com/questions/tagged/docusaurus",
            //   },
            {
              label: "Discord",
              href:
                (process.env.URL || "https://zmk.dev") +
                "/community/discord/invite",
            },
            {
              label: "Mastodon",
              href: "https://fosstodon.org/@zmk",
            },
          ],
        },
        {
          title: "More",
          items: [
            {
              label: "Blog",
              to: "blog",
            },
            {
              label: "GitHub",
              href: "https://github.com/zmkfirmware/zmk",
            },
            {
              html: `
                <a href="https://www.netlify.com" target="_blank" rel="noreferrer noopener" aria-label="Deploys by Netlify">
                  <img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" />
                </a>
              `,
            },
          ],
        },
      ],
      copyright: `Copyright © ${new Date().getFullYear()} ZMK Project Contributors. <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" /></a>`,
    },
    algolia: {
      appId: "USXLDJ14JE",
      apiKey: "384a3bd2d50136c9dc8c8ddfe1b3a4b2",
      indexName: "zmkfirmware",
    },
  },
  presets: [
    [
      "@docusaurus/preset-classic",
      {
        googleAnalytics: {
          trackingID: "UA-145201102-2",
          anonymizeIP: true,
        },
        docs: {
          // Removed (for now) until we have content for each level of the generated breadcrumbs
          breadcrumbs: false,
          // It is recommended to set document id as docs home page (`docs/` path).
          sidebarPath: require.resolve("./sidebars.js"),
          // Please change this to your repo.
          editUrl: "https://github.com/zmkfirmware/zmk/edit/main/docs/",
        },
        blog: {
          showReadingTime: true,
          // Please change this to your repo.
          editUrl: "https://github.com/zmkfirmware/zmk/edit/main/docs/",
          blogSidebarCount: "ALL",
        },
        theme: {
          customCss: [
            require.resolve("./src/css/custom.css"),
            require.resolve("./src/css/codes.css"),
          ],
        },
      },
    ],
  ],
  markdown: {
    format: "detect",
    mermaid: true,
    mdx1Compat: {
      comments: false,
      admonitions: false,
      headingIds: true,
    },
  },
};
