import { App, message as defaultMessage, notification as defaultNotification } from 'antd';

import type { MessageInstance } from 'antd/es/message/interface';
import type { NotificationInstance } from 'antd/es/notification/interface';

/**
 * 供请求层等非组件代码使用的 message/notification 实例。
 * 由 AntdAppInstanceCapture 在 App 内通过 useApp() 注入，从而继承 ConfigProvider 的主题。
 * 在 Capture 挂载前使用时会回退到 antd 默认静态 API（无主题）。
 */
let message: MessageInstance = defaultMessage;
let notification: NotificationInstance = defaultNotification;

// eslint-disable-next-line react-refresh/only-export-components
export { message, notification };

/**
 * 必须在 <App> 内部渲染一次，用于把带主题的 message/notification 写入上述导出。
 * 在 App.tsx 根级挂载即可。
 */
export function AntdAppInstanceCapture(): null {
    const { message: m, notification: n } = App.useApp();
    message = m;
    notification = n;
    return null;
}
