import React, { Fragment } from 'react';
import { InputNumber, message } from 'antd';
import {
  defaultConfigInfo,
  defaultItemConfigInfo,
  fieldTypeList,
  fontFamilyList,
  templateCode,
} from '@/webPublic/zyd_private/DragAndPrint/ViewPrint/config';
import { getInfo } from '@/highOrderComponent/Service';

const saveItemConfig = (data, getPage) => {
  if (typeof data.newY !== 'undefined' || typeof data.newX !== 'undefined') {
    let info = { ...data };
    info.x = (typeof data.newX !== 'undefined' && data.newX) || info.x;
    info.y = (typeof data.newY !== 'undefined' && data.newY) || info.y;
    getInfo({
      contentStr: JSON.stringify([info]),
    }, '/PublicPrintApi/update').then((x) => {
      if(x){
        getPage();
        message.success('保存成功');
      }
    });
  }
};

const handleColumns = (props) => {
  return [
    {
      dataIndex: 'title',
      title: '字段',
      type: 'input',
    },
    {
      dataIndex: 'content',
      title: '显示内容',
      type: 'input',
    },
    {
      dataIndex: 'mark',
      title: '换行分隔符',
      type: 'input',
    },
    {
      dataIndex: 'fieldType',
      title: '显示类型',
      type: 'select',
      options: fieldTypeList,
      render: (text) => {
        for (let item of fieldTypeList) {
          if (item.key === text) {
            return item.name;
          }
        }
        return text;
      },
    },
    {
      dataIndex: 'high',
      title: '显示高度',
      type: 'inputNumber',
    },
    {
      dataIndex: 'wide',
      title: '显示宽度',
      type: 'inputNumber',
    },
    {
      dataIndex: 'hasHidden',
      title: '是否隐藏',
      type: 'select',
      options: [{ key: 'true', name: '是' }, { key: 'false', name: '否' }],
      render: (text) => {
        return text ? '是' : '否';
      },
    },
    {
      dataIndex: 'fieldFont',
      title: '字体',
      type: 'select',
      options: fontFamilyList,
    },
    {
      dataIndex: 'fieldFontSize',
      title: '文字大小',
      type: 'inputNumber',
      min: 12,
      max: 100,
      precision: 0,
    },
    {
      dataIndex: 'x',
      title: 'x轴偏移量',
      type: 'inputNumber',
      renderConfig: {
        type: 'component',
        render: function({ text, record, getPage }) {
          return (
            <Fragment>
              {text}
              <InputNumber
                precision={0}
                onChange={(value) => {
                  record.newX = value;
                }}
                defaultValue={text}
              />
            </Fragment>
          );
        },
      },
      precision: 0,
    },
    {
      dataIndex: 'y',
      title: 'y轴偏移量',
      type: 'inputNumber',
      precision: 0,
      renderConfig: {
        type: 'component',
        render: function({ text, record, getPage }) {
          return (
            <Fragment>
              {text}
              <InputNumber
                precision={0}
                onChange={(value) => {
                  record.newY = value;
                }}
                defaultValue={text}
              />
            </Fragment>
          );
        },
      },
    },
    {
      dataIndex: 'save',
      title: '保存',
      renderConfig: {
        type: 'component',
        render: function({ text, record, getPage }) {
          return (
            <a
              onClick={() => {
                saveItemConfig(record, getPage);
              }}>
              保存
            </a>
          );
        },
      },
    },
    {
      dataIndex: 'fieldPattern',
      title: '显示格式',
      type: 'input',
    },
    {
      dataIndex: 'transform',
      title: '旋转角度',
      type: 'inputNumber',
      min: 0,
      max: 360,
      precision: 0,
    },
  ];
};

const pageSearch = ({ changeConfigAll, configAll, location }) => {
  const columns = handleColumns();
  const fields = columns
    .filter((y) => {
      return y.type;
    })
    .map((x) => {
      if (x.type) {
        return {
          ...x,
          name: x.title,
          key: x.dataIndex,
        };
      } else {
        return null;
      }
    });
  fields.push({
    key: 'info',
    name: '其他配置项JSON',
    type: 'textarea',
  });
  columns.push({
    dataIndex: 'operation',
    title: '操作',
    renderConfig: {
      type: 'ModalEdit',
      name: '编辑',
      width: 900,
      fileSpan: { big: 2, small: 2 },
      nameSpan: { big: 7, small: 7 },
      url: '/PublicPrintApi/update',
      fields,
      beforeUpdate: (record, formValues) => {
        formValues.info =
          formValues.info || JSON.stringify(defaultItemConfigInfo); // 其他配置项JSON
        return {
          contentStr: JSON.stringify([
            {
              ...record,
              ...formValues,
            },
          ]),
        };
      },
      responseCallBack: (response) => {
        if (!response) {
          return false;
        } else {
          return response;
        }
      },
    },
  });

  return {
    search: {
      url: '/PublicPrintApi/query',
      field: {
        code: {
          defaultValue:
            (location && location.state && location.state.code) ||
            'studentCard',
          required: true,
        },
      },
      scroll: { x: 'max-content' },
      giveFieldsToFormValues: true,
      responseCallBack: (response) => {
        changeConfigAll(response);
        return response.config;
      },
      afterFormValuesChange: (key, oldValue, getPage) => {
        if (key === 'code') {
          getPage();
        }
      },
      condition: [
        {
          key: 'code',
          name: '业务功能',
          type: 'select',
          options: templateCode.map((x) => {
            return {
              key: x.code,
              name: x.name,
            };
          }),
        },
      ],
      nameSpan: { big: 8, small: 9 },
      fileSpan: { big: 4, small: 4 },
    },
    tableRowKey: 'id',
    columns,
  };
};

/****
 * content: "${name}"
 errCode: ""
 errLog: ""
 errMsg: ""
 fieldCode: "name"
 fieldFont: "黑体"
 fieldFontSize: null
 fieldPattern: ""
 fieldType: "0"
 hasHidden: false
 id: 6
 respcode: "00"
 respdesc: ""
 title: "姓名"
 transform: 0
 x: 648
 y: 798
 *
 * */
export default pageSearch;
