import { IconSettings } from '@material-hu/icons/tabler';
import List from '@material-hu/mui/List';

import HuSidebarNavItem from '@material-hu/components/design-system/Sidebar/components/NavItem';

import useAuth from 'src/contexts/JWTContext';
import useFeatureFlag from 'src/hooks/useFeatureFlag';
import { rolesAndPermissionsRoutes } from 'src/pages/dashboard/RolesAndPermissions/routes';
import { settingsRoutes } from 'src/pages/dashboard/Settings/routes';
import { FeatureFlags } from 'src/types/featureFlags';
import { Module } from 'src/types/modules';
import { insertIf } from 'src/utils/arrayUtils';
import { useLokaliseTranslation } from 'src/utils/i18n';

import useGetSidebarIcon from '../hooks/useGetSidebarIcon';
import { type SidebarItemProps } from '../types';
import { getItemIsActive, getSubItemIsActive } from '../utils';

const SettingsItem = ({
  isCollapsed,
  onClick,
  isActive: isActiveProp,
}: SidebarItemProps) => {
  const { t } = useLokaliseTranslation('backoffice_only');
  const getIcon = useGetSidebarIcon();
  const { modules } = useAuth();
  const isCerberusEnabled = useFeatureFlag(FeatureFlags.CERBERUS_ENABLED);

  const subItems = [
    ...insertIf(!!modules?.includes(Module.SETTINGS), {
      key: 'generalSettings',
      title: t(`dashboard_sidebar.general_${Module.SETTINGS}`),
      path: 'settings/general',
      info: undefined as { isNew?: boolean } | undefined,
    }),
    ...insertIf(!!modules?.includes(Module.ROLES_AND_PERMISSIONS), {
      key: 'rolesAndPermissions',
      title: t(`dashboard_sidebar.${Module.ROLES_AND_PERMISSIONS}`),
      path: rolesAndPermissionsRoutes.base(),
      info: { isNew: true } as { isNew?: boolean } | undefined,
    }),
    ...insertIf(
      isCerberusEnabled
        ? !!modules?.includes(Module.SECURITY)
        : !!modules?.includes(Module.SETTINGS),
      {
        key: isCerberusEnabled ? 'security' : 'settingsSecurity',
        title: t(`dashboard_sidebar.${Module.SECURITY}`),
        path: 'settings/security',
        info: undefined as { isNew?: boolean } | undefined,
      },
    ),
  ];

  const isActive = isActiveProp ?? subItems.some(i => getItemIsActive(i.path));

  const renderSubItems = () => {
    if (isCollapsed) return null;
    return (
      <List
        disablePadding
        sx={{ '& > *:not(:last-child)': { mb: 0 } }}
      >
        {subItems.map((item, index) => (
          <HuSidebarNavItem
            key={item.key}
            depth={1}
            isLastChild={index === subItems.length - 1}
            active={getSubItemIsActive(item.path)}
            isCollapsed={isCollapsed}
            onClick={onClick}
            title={item.title}
            path={item.path}
            info={item.info}
          />
        ))}
      </List>
    );
  };

  return (
    <HuSidebarNavItem
      key="settings"
      depth={0}
      title={t('dashboard_sidebar.settings')}
      icon={getIcon({ defaultIcon: IconSettings, key: 'Settings' })}
      path={subItems[0]?.path ?? settingsRoutes.general()}
      isCollapsed={isCollapsed}
      onClick={onClick}
      active={isActive}
      open={isActive}
    >
      {renderSubItems()}
    </HuSidebarNavItem>
  );
};

export default SettingsItem;
