import React, { useState } from 'react';
import { Form, Button } from 'antd';
import Shell from '@/baseComponent/Shell';
import { ModalInfo } from '@/baseComponent/Modal';
import { addOrEditTableItem } from '@/webPublic/Services';
import { RenderFormByObjId } from '../RenderForm';
import { preHandle } from '@/webPublic/one_stop_public/utils/myutils';

// 单一数据页面模板，页面只是显示和操作一条数据
// 1. 页面显示通过模板id渲染。
// 2. 页面数据通过元数据表id, key，value 查询和修改。
// templateCode, 页面模板id
// tableId, 元数据列表id
// dataTypeKey, 元数据表格中查找数据的key
// dataTypeValue, 元数据表格中查找数据的value
// children， 可以传children，但children不能是数组(不能传属性)，children里可以自定义其他组件。
// callBackPromise 保存成功后的 回调Promise函数. 用于业务上的需求
function SingleDataPageTemplate(props) {
  const [isAdd, setIsAdd] = useState(false);

  function handleSave() {
    const { tableId, form, callBack } = props;
    const { validateFields } = form;

    validateFields((err, values) => {
      if (err) return;
      // console.log(JSON.stringify(values.JjvkRobXWTE), JSON.stringify(values.JjvkwLqcsyY));
      preHandle(values);
      // console.log(JSON.stringify(values.JjvkRobXWTE));
      addOrEditTableItem({ objId: tableId, isAdd, data: values }).then((res) => {
        if (res) {
          if (callBack) {
            callBack();
          } else {
            ModalInfo('保存成功！');
          }
        }
      });
    });
  }

  const { children, form, templateCode, tableId, dataTypeKey, dataTypeValue } = props;
  let ClonedChildren;
  if (children) {
    ClonedChildren = React.cloneElement(React.Children.only(children), {
      form,
      isAdd,
      url: '/DataObjApi/addFormData',
    });
  }

  return (
    <Shell styleShell={{ marginTop: 0 }}>
      <RenderFormByObjId
        objId={tableId}
        dataTypeKey={dataTypeKey}
        dataTypeValue={dataTypeValue}
        templateCode={templateCode}
        onLoad={(res) => setIsAdd(!!(!res || res.errMsg))}
        form={form}
      />
      {ClonedChildren || (
        <div style={{ textAlign: 'center', padding: 16 }}>
          <Button type="primary"
                  shape="round"
                  ghost
                  onClick={handleSave}>
            保存
          </Button>
        </div>
      )}
    </Shell>
  );
}

export default Form.create()(SingleDataPageTemplate);
