import { inject, VNodeChild } from 'vue';
import Empty from '../empty';
import { defaultConfigProvider } from '.';

export interface RenderEmptyProps {
  componentName?: string;
}

const RenderEmpty = (props: RenderEmptyProps) => {
  const configProvider = inject('configProvider', defaultConfigProvider);
  const renderHtml = (componentName?: string) => {
    const { getPrefixCls } = configProvider;
    const prefix = getPrefixCls('empty');
    switch (componentName) {
      case 'Table':
      case 'List':
        return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />;

      case 'Select':
      case 'TreeSelect':
      case 'Cascader':
      case 'Transfer':
      case 'Mentions':
        return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} class={`${prefix}-small`} />;

      default:
        return <Empty />;
    }
  };
  return renderHtml(props.componentName);
};

function renderEmpty(componentName?: string): VNodeChild | JSX.Element {
  return <RenderEmpty componentName={componentName} />;
}

export type RenderEmptyHandler = typeof renderEmpty;

export default renderEmpty;
