export function settingsSidebar() {
    return app.components.pageSidebar(
        {
            pbEvent: "settingsSidebar",
            className: "settings-sidebar",
        },
        t.nav(
            { className: "sidebar-content scrollable" },
            () => {
                const result = [];

                for (const groupName in app.store.settingsNavGroups) {
                    const children = app.store.settingsNavGroups[groupName];

                    const groupEl = t.details(
                        { className: "nav-group", "html-data-group": groupName, open: true },
                        t.summary(
                            { tabIndex: -1, onfocusout: () => false, onclick: () => false, onkeyup: () => false },
                            groupName,
                        ),
                        () => {
                            return children.map((link) => {
                                const isLocal = link.href.startsWith("#/");

                                return t.a(
                                    {
                                        href: () => link.href,
                                        target: () => !isLocal ? "_blank" : undefined,
                                        rel: () => !isLocal ? "noopener noreferrer" : undefined,
                                        className: (el) => {
                                            const isActive = link.isActive?.(el)
                                                || app.utils.isActivePath(link.href, false);
                                            return `nav-item ${isActive ? "active" : ""}`;
                                        },
                                    },
                                    () => {
                                        if (link.icon) {
                                            return t.i({ className: link.icon, ariaHidden: true });
                                        }
                                    },
                                    t.span({ className: "txt" }, () => link.label),
                                );
                            });
                        },
                    );

                    result.push(groupEl);
                }

                return result;
            },
        ),
    );
}
