/* eslint-disable react-hooks/exhaustive-deps */
import { ProDescriptions } from '@ant-design/pro-components';
import React, { useMemo, useState } from 'react';
import { doFetch } from '@/utils/doFetch';
import PropTypes from 'prop-types';
import styles from './index.less';
import { Col } from 'antd';

const { Item } = ProDescriptions;

function DetailPro(props) {
  let { fields } = props;
  const [curitem, setcuritem] = useState(props.detailData ?? {}); //全部数据

  const dataProps = useMemo(() => {
    if (props.detailData) {
      setcuritem(props.detailData);
      return { dataSource: props.detailData };
    } else {
      return {
        request: async () => {
          let res = await doFetch({ url: props.detailpath, params: props.params });
          if (props?.extendField) {
            let obj = {};
            res?.data?.data[props.extendField]?.forEach?.((it) => {
              obj[it?.fieldId] = it?.fieldRealValue;
            });
            //console.log('extendField:', obj);
            setcuritem({
              ...(res?.data?.data ?? {}),
              ...obj,
            });
            // console.log('drawerpro:', {
            //   ...(res?.data?.data ?? {}),
            //   ...obj,
            // });

            return {
              success: res?.code == '0000',
              data:
                {
                  ...(res?.data?.data ?? {}),
                  ...obj,
                } ?? {},
            };
          }
        },
      };
    }
  }, [props.detailData]);

  return (
    <ProDescriptions column={3} {...dataProps} title={props.title}>
      {fields?.map((it, i) => {
        const dataIndexs =
          !it?.render || it?.valueType == 'option'
            ? { dataIndex: it.dataIndex, valueType: it.valueType }
            : {};
        if (it.valueType == 'split') {
          return (
            <>
              <Col span={24}>
                <div className={styles.title} style={{ borderWidth: i == 0 ? 0 : 1 }}>
                  {it.title}
                </div>
              </Col>
            </>
          );
        }
        return (
          <Item
            span={it?.span ? it?.span : fields[i + 1]?.valueType == 'split' ? 3 : 1}
            key={it.dataIndex}
            label={it.title}
            {...dataIndexs}
          >
            {it?.render ? it?.render?.(curitem[it.dataIndex], curitem) : ''}
          </Item>
        );
      })}
    </ProDescriptions>
  );
}

DetailPro.propTypes = {
  detailpath: PropTypes.string,
  params: PropTypes.object,
  detailData: PropTypes.object,
  fields: PropTypes.array,
};

export default DetailPro;