import type { ExtractPropTypes } from 'vue';
import { defineComponent } from 'vue';
import useConfigInject from '../_util/hooks/useConfigInject';
import PropTypes from '../_util/vue-types';

export const listItemMetaProps = {
  avatar: PropTypes.any,
  description: PropTypes.any,
  prefixCls: PropTypes.string,
  title: PropTypes.any,
};

export type ListItemMetaProps = Partial<ExtractPropTypes<typeof listItemMetaProps>>;

export default defineComponent({
  name: 'AListItemMeta',
  props: listItemMetaProps,
  displayName: 'AListItemMeta', // 兼容历史函数式组件
  __ANT_LIST_ITEM_META: true,
  slots: ['avatar', 'description', 'title'],
  setup(props, { slots }) {
    const { prefixCls } = useConfigInject('list', props);
    return () => {
      const classString = `${prefixCls.value}-item-meta`;
      const title = props.title ?? slots.title?.();
      const description = props.description ?? slots.description?.();
      const avatar = props.avatar ?? slots.avatar?.();
      const content = (
        <div class={`${prefixCls.value}-item-meta-content`}>
          {title && <h4 class={`${prefixCls.value}-item-meta-title`}>{title}</h4>}
          {description && (
            <div class={`${prefixCls.value}-item-meta-description`}>{description}</div>
          )}
        </div>
      );
      return (
        <div class={classString}>
          {avatar && <div class={`${prefixCls.value}-item-meta-avatar`}>{avatar}</div>}
          {(title || description) && content}
        </div>
      );
    };
  },
});