// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion

const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');

/** @type {import('@docusaurus/types').Config} */
const config = {
    title: 'Apache Uniffle(Incubating)',
    tagline: 'Apache Uniffle(Incubating) is a Remote Shuffle Service',
    url: 'https://uniffle.apache.org/',
    baseUrl: '/',
    onBrokenLinks: 'throw',
    onBrokenMarkdownLinks: 'warn',
    favicon: 'img/favicon.ico',

    organizationName: 'apache',
    projectName: 'incubator-uniffle-website',

    i18n: {
        defaultLocale: 'en',
        locales: ['en', 'zh-CN'],
        localeConfigs: {
            'zh-CN': {label: "简体中文"},
        },
    },

    plugins: [
        [
            '@docusaurus/plugin-content-docs',
            {
                id: 'community',
                path: 'community',
                routeBasePath: 'community',
                sidebarPath: require.resolve('./sidebars.js'),
            },
        ],
        [
            '@docusaurus/plugin-content-docs',
            {
                id: 'download',
                path: 'download',
                routeBasePath: 'download',
                sidebarPath: require.resolve('./sidebars.js'),
            },
        ]
    ],

    presets: [
        [
            'classic',
            /** @type {import('@docusaurus/preset-classic').Options} */
            ({
                docs: {
                    path: 'docs',
                    routeBasePath: "/docs",
                    showLastUpdateAuthor: true,
                    showLastUpdateTime: true,
                    sidebarPath: require.resolve('./sidebars.js'),
                    editUrl: 'https://github.com/apache/incubator-uniffle',
                },
                blog: {
                    showReadingTime: true,
                    editUrl: 'https://github.com/apache/incubator-uniffle',
                },
                theme: {
                    customCss: require.resolve('./src/css/custom.css'),
                },
            }),
        ],
    ],

    themeConfig:
    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
        ({
            navbar: {
                title: 'Apache Uniffle(Incubating)',
                logo: {
                    alt: 'Apache Uniffle(Incubating)',
                    src: 'img/uniffle-logo.png',
                },
                items: [
                    {type: 'doc', docId: 'intro', position: 'right', label: 'Docs'},
                    {type: 'doc', docId: 'how-to-contribute', position: 'right', label: 'Community', docsPluginId: 'community'},
                    {to: '/blog', label: 'Blog', position: 'right'},
                    {to: '/download', label: 'Download', position: 'right'},
                    {
                        type: 'dropdown',
                        label: 'ASF',
                        position: 'right',
                        items: [
                            {label: 'Foundation', to: 'https://www.apache.org/'},
                            {label: 'License', to: 'https://www.apache.org/licenses/'},
                            {label: 'Events', to: 'https://www.apache.org/events/current-event'},
                            {label: 'Security', to: 'https://www.apache.org/security/'},
                            {label: 'Sponsorship', to: 'https://www.apache.org/foundation/sponsorship.html'},
                            {label: 'Privacy', to: 'https://www.apache.org/foundation/policies/privacy.html'},
                            {label: 'Thanks', to: 'https://www.apache.org/foundation/thanks.html'}
                        ],
                    },
                    {
                        type: 'localeDropdown',
                        position: 'right',
                    },
                    {
                        href: 'https://github.com/apache/incubator-uniffle',
                        position: 'right',
                        className: 'header-github-link',
                        'aria-label': 'GitHub repository',
                    },
                ],
            },
            footer: {
                style: 'dark',
                links: [
                    {
                        title: 'Docs',
                        items: [
                            {
                                label: 'Getting Started',
                                to: '/docs/intro',
                            },
                        ],
                    },
                    {
                        title: 'Community',
                        items: [
                            {
                                label: 'Slack',
                                href: 'https://join.slack.com/t/the-asf/shared_invite/zt-1fm9561yr-uzTpjqg3jf5nxSJV5AE3KQ',
                            },
                            {
                                label: 'Issue Tracker',
                                href: 'https://github.com/apache/incubator-uniffle/issues',
                            },
                        ],
                    },
                    {
                        title: 'More',
                        items: [
                            {
                                label: 'GitHub',
                                href: 'https://github.com/apache/incubator-uniffle',
                            },
                        ],
                    },
                ],
                logo: {
                    alt: 'Apache Incubator logo',
                    src: 'img/apache-incubator.svg',
                    href: 'https://incubator.apache.org/'
                },
                copyright: `<div style="text-align: left;">
          <div>
            <p style="font-family: Avenir-Medium;font-size: 14px;color: #999;line-height: 20px;"> Apache Uniffle(Incubating) is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. </p>
          </div>
          <div style="border-top: 1px solid #ccc;min-height: 60px;line-height: 20px;text-align: center;font-family: Avenir-Medium;font-size: 14px;color: #999;display: flex;align-items: center;"><span>Copyright © ${new Date().getFullYear()} The Apache Software Foundation. Apache Uniffle(Incubating), Uniffle, and its feather logo are trademarks of The Apache Software Foundation.</span></div>
        </div>`,
            },
            prism: {
                theme: lightCodeTheme,
                darkTheme: darkCodeTheme,
            },
        }),

    themes: [
        [require.resolve("@easyops-cn/docusaurus-search-local"), { hashed: true }],
    ]
};

module.exports = config;
