// 运行时配置
import * as AntdIcons from '@ant-design/icons';
import React from 'react';

type MenuItem = {
  icon?: string | React.ReactNode;
  [key: string]: unknown;
};

type AntdIconComponent = React.ComponentType;

// 临时屏蔽 React findDOMNode 警告，通常来自第三方库
const originalWarn = console.error;
console.error = (...args: Parameters<typeof console.error>) => {
  if (
    typeof args[0] === 'string' &&
    args[0].includes('findDOMNode is deprecated')
  ) {
    return;
  }
  originalWarn(...args);
};

// 全局初始化数据配置，用于 Layout 用户信息和权限初始化
// 更多信息见文档：https://umijs.org/docs/api/runtime-config#getinitialstate
export async function getInitialState(): Promise<{ name: string }> {
  return { name: '@umijs/max' };
}

export const layout = () => {
  return {
    logo: 'https://img.alicdn.com/tfs/TB1YHEpwUT1gK0jSZFhXXaAtVXa-28-27.svg',
    menuDataRender: (menuData: MenuItem[]) => {
      return menuData.map((item) => {
        const iconName = typeof item.icon === 'string' ? item.icon : undefined;
        const isIconName = iconName
          ? /(Outlined|Filled|TwoTone)$/.test(iconName)
          : false;
        const IconComponent = isIconName
          ? (AntdIcons[iconName as keyof typeof AntdIcons] as AntdIconComponent)
          : undefined;
        return {
          ...item,
          icon: IconComponent ? React.createElement(IconComponent) : item.icon,
        };
      });
    },
    token: {
      layout: {
        bgLayout: 'none', // Remove gradients and glows
      },
    },
  };
};
