import { RESPONSE_CODE } from '@/constants/enum';
import UploadC from '@/pages/Invoice/waitProcessRecord/components/UploadSingleImg';
import {
  postAdminClientAddOrModifyClientComunicationInfo,
  postAdminClientQueryClientPage,
  postOrderErpOrderStagesUpload,
  postOrderErpUsersListByPage,
  postServiceConstClientWay,
  postServiceConstTradeStatus,
} from '@/services';
import { enumToSelect } from '@/utils';
import {
  ModalForm,
  ProFormDateTimePicker,
  ProFormSelect,
  ProFormText,
  ProFormTextArea,
  ProFormUploadDragger,
} from '@ant-design/pro-components';
import { Button, Col, Form, Row, message } from 'antd';
import { RcFile } from 'antd/es/upload';
import './style.css';
export default ({ data, type, reloadTable }) => {
  const [form] = Form.useForm();
  const onfinish = async (values) => {
    const resSearchId = await postAdminClientQueryClientPage({
      data: {
        groupFilter: 'all',
      },
    });
    const matchingItem = resSearchId.data.data.find(
      (item) => item.id === values.name,
    );
    let matchedId;
    if (matchingItem) {
      matchedId = matchingItem.id; // 匹配成功,取出 id
      values.name = matchingItem.name;
    } else {
      matchedId = null; // 如果没有匹配项,可以设置为 null 或其他值
    }
    const res = await postAdminClientAddOrModifyClientComunicationInfo({
      data: {
        ...values,
        ticketsAttachments: form.getFieldValue('ticketsAttachments'),
        clientId: matchedId,
      },
    });
    if (res.result === RESPONSE_CODE.SUCCESS) {
      message.success('新增成功');
      reloadTable();
      return true;
    }
    // 不返回不会关闭弹框
  };

  const editOnfinish = async (values) => {
    // setEditClientId(data.clientId);
    values.clientId = data.clientId;

    // const resSearchId = await postAdminClientQueryClientPage({
    //   data: {
    //     groupFilter: 'all',
    //   },
    // });
    // const matchingItem = resSearchId.data.data.find(
    //   (item) => item.id === values.name,
    // );
    const res = await postAdminClientAddOrModifyClientComunicationInfo({
      data: {
        ...values,
        // ticketsAttachments: form.getFieldValue("ticketsAttachments"),
        ticketsAttachments:
          form.getFieldValue('ticketsAttachments') !== undefined
            ? form.getFieldValue('ticketsAttachments')
            : data?.ticketsAttachments,
        url:
          form.getFieldValue('url') !== undefined
            ? form.getFieldValue('url')
            : data?.url,
        // ticketsAttachments: data?.annexUrl,
      },
    });
    if (res.result === RESPONSE_CODE.SUCCESS) {
      message.success('新增成功');
      reloadTable();
      return true;
    }
    // 不返回不会关闭弹框
  };
  const optType = {
    add: {
      readOnly: false,
      title: '新增跟进记录',
      button: (
        <Button size={'middle'} type="primary">
          新增
        </Button>
      ),
      onFinish: onfinish,
    },
    modify: {
      readOnly: false,
      title: '修改跟进记录',
      button: (
        <Button size={'middle'} type="primary">
          编辑
        </Button>
      ),
      onFinish: editOnfinish,
    },
    detail: {
      readOnly: true,
      title: '查看跟进记录',
      button: (
        <Button size={'middle'} type="primary" color="red">
          查看
        </Button>
      ),
      onFinish: () => {},
    },
  };
  return (
    <ModalForm
      title={optType[type].title}
      resize={{
        onResize() {
          console.log('resize!');
        },
        maxWidth: window.innerWidth * 0.8,
        minWidth: 400,
      }}
      form={form}
      trigger={optType[type].button}
      autoFocusFirstInput
      drawerProps={{
        destroyOnClose: true,
      }}
      submitTimeout={2000}
      onFinish={optType[type].onFinish}
    >
      <ProFormSelect
        name="name"
        readonly={optType[type].readOnly}
        fieldProps={{
          labelInValue: false,
          disabled: type === 'modify',
        }}
        initialValue={data ? data?.clientName + '' : null}
        label="客户"
        width="sm"
        request={async () => {
          const res = await postAdminClientQueryClientPage({
            data: {
              groupFilter: 'all',
            },
          });
          // const namesArray = res.data.data.map((item) => item.name);
          // const formattedObject = res.data.data.reduce((acc, name) => {
          //   acc[name] = name; // 将名称作为键和值
          //   return acc;
          // }, {});
          // console.log(namesArray, '5656namesArray');
          // const formattedObject = res.data.data.reduce((acc, item) => {
          //   acc[item.name] = item.name; // 使用 name 作为键,id 作为值
          //   return acc;
          // }, {});
          // return enumToSelect(formattedObject);
          const options = res.data.data.reduce((acc, item) => {
            acc.push({ label: item.name, value: item.id }); // 使用 name 作为 label,id 作为 value
            return acc;
          }, []);
          return options;
        }}
        rules={[
          {
            required: true,
            message: '请选择客户',
          },
        ]}
      ></ProFormSelect>
      <ProFormText
        name="contact"
        label="联系人"
        width="sm"
        placeholder="请输入联系人"
        initialValue={data?.content}
        readonly={optType[type].readOnly}
        rules={[
          {
            required: true,
            message: '请输入联系人',
          },
        ]}
      ></ProFormText>
      <ProFormText
        name="contactPhone"
        label="联系电话"
        width="sm"
        placeholder="请输入联系电话"
        initialValue={data?.content}
        readonly={optType[type].readOnly}
        rules={[
          {
            required: true,
            message: '请输入联系电话',
          },
        ]}
      ></ProFormText>
      <ProFormDateTimePicker
        name="datetime"
        label="跟进日期"
        initialValue={data ? data?.datetime + '' : null}
        placeholder="请选择跟进时间"
        width="sm"
        rules={[
          {
            required: true,
            message: '请选择跟进日期',
          },
        ]}
      />
      <ProFormSelect
        name="tradeStatus"
        label="跟进状态"
        width="sm"
        placeholder="请输入跟进状态"
        readonly={optType[type].readOnly}
        fieldProps={{
          labelInValue: false,
        }}
        initialValue={data?.tradeStatus ? data?.tradeStatus + '' : null}
        rules={[
          {
            required: true,
            message: '请输入跟进状态',
          },
        ]}
        request={async () => {
          const res = await postServiceConstTradeStatus();
          return enumToSelect(res.data);
        }}
      />
      <ProFormSelect
        name="way"
        width="sm"
        readonly={optType[type].readOnly}
        fieldProps={{
          labelInValue: false,
        }}
        initialValue={data?.way ? data?.way + '' : null}
        label="跟进方式"
        request={async () => {
          const res = await postServiceConstClientWay();
          return enumToSelect(res.data);
        }}
        rules={[
          {
            required: true,
            message: '请选择跟进方式',
          },
        ]}
      ></ProFormSelect>
      <ProFormTextArea
        name="content"
        label="跟进详情"
        placeholder="请输入跟进详情"
        initialValue={data?.content}
        readonly={optType[type].readOnly}
        rules={[
          {
            required: true,
            message: '请输入跟进详情',
          },
        ]}
      ></ProFormTextArea>
      <ProFormUploadDragger
        label="附件"
        name="attachment"
        action="upload.do"
        hidden={optType[type].readOnly}
        onChange={(info) => {
          const uploadFile = async ({ fileList: newFileList }) => {
            if (newFileList.length > 0) {
              const formData = new FormData();
              formData.append('file', newFileList[0].originFileObj as RcFile);
              const res = await postOrderErpOrderStagesUpload({
                data: formData,
                headers: {
                  'Content-Type':
                    'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
                },
              });
              const url = res.data;
              console.log('attachments' + JSON.stringify(url));
              form.setFieldValue('attachments', url);
            } else {
              form.setFieldValue('attachments', null);
            }
          };
          uploadFile(info);
        }}
        max={1}
      />
      <a hidden={!optType[type].readOnly} href={data?.attachments} download>
        下载附件
      </a>
      <ProFormTextArea
        name="comment"
        label="客户评价"
        placeholder="请输入客户评价"
        initialValue={data?.comment}
        readonly={optType[type].readOnly}
      ></ProFormTextArea>
      <ProFormText
        initialValue={data?.attachments}
        name="attachments"
        hidden
      ></ProFormText>
      <ProFormText initialValue={data?.id} name="id" hidden></ProFormText>
      <div className="styled-text">
        <div className="vertical-line"></div>
        <span className="text">工单指派</span>
      </div>
      <ProFormSelect
        name="ticketsType"
        label="工单类型"
        width="sm"
        placeholder="请输入工单类型"
        readonly={optType[type].readOnly}
        fieldProps={{
          labelInValue: false,
        }}
        initialValue={data?.ticketsType ? data?.ticketsType + '' : null}
        request={async () => {
          return [
            { label: '问题', value: 'QUESTION' },
            { label: '需求', value: 'DEMAND' },
            { label: '建议', value: 'ADVICE' },
          ];
        }}
      />
      <ProFormTextArea
        name="ticketsDetail"
        label="工单详情"
        placeholder="请输入工单详情"
        initialValue={data?.ticketsDetail ? data?.ticketsDetail + '' : null}
        readonly={optType[type].readOnly}
      ></ProFormTextArea>
      {/* <ProFormUploadDragger
        label="工单附件"
        name="ticketsAttachment"
        action="upload.do"
        hidden={optType[type].readOnly}
        onChange={(info) => {
          const uploadFile = async ({ fileList: newFileList }) => {
            if (newFileList.length > 0) {
              const formData = new FormData();
              formData.append('file', newFileList[0].originFileObj as RcFile);
              const res = await postOrderErpOrderStagesUpload({
                data: formData,
                headers: {
                  'Content-Type':
                    'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
                },
              });
              const url = res.data;
              console.log('ticketsAttachments' + JSON.stringify(url));
              form.setFieldValue('ticketsAttachments', url);
            } else {
              form.setFieldValue('ticketsAttachments', null);
            }
          };
          uploadFile(info);
        }}
        max={1}
      /> */}
      <Row>
        <Col span={4}>上传发票:</Col>
        <Col span={20}>
          <UploadC
            onFilesChange={async (newFileList) => {
              if (newFileList.length > 0) {
                const urls = []; // 创建一个数组来存储所有的 URL

                for (const file of newFileList) {
                  const formData = new FormData();
                  formData.append('file', file.originFileObj as RcFile);

                  const res = await postOrderErpOrderStagesUpload({
                    data: formData,
                    headers: {
                      'Content-Type':
                        'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
                    },
                  });

                  const url = res.data; // 获取响应中的 URL
                  urls.push(url); // 将每个 URL 追加到数组中
                }

                // 将所有 URL 使用 ',' 进行拼接
                const combinedUrl = urls.join(',');
                form.setFieldValue('ticketsAttachments', combinedUrl); // 设置表单字段值为拼接后的 URL
              } else {
                form.setFieldValue('ticketsAttachments', null); // 如果没有文件,则清空 URL
              }
            }}
          ></UploadC>
        </Col>
      </Row>
      <a hidden={!optType[type].readOnly} href={data?.orderAttachment} download>
        {/* <a href={data?.annexUrl} download> */}
        下载附件
      </a>
      <ProFormSelect
        name="assignPeople"
        width="sm"
        readonly={optType[type].readOnly}
        fieldProps={{
          labelInValue: false,
        }}
        initialValue={data?.assignPeople ? data?.assignPeople + '' : null}
        label="指派人员"
        request={async () => {
          const res = await postOrderErpUsersListByPage({
            data: {
              pageSize: 10000,
            },
          });
          const userOptions = res.data.records
            ? res.data.records.map((user) => ({
                label: user.userName, // 或者使用其他需要的属性
                value: user.userName, // 作为value的字段
              }))
            : [];
          return userOptions;
        }}
      ></ProFormSelect>
      {/* <Row>
        <Col span={4}>上传发票:</Col>
        <Col span={20}>
          <UploadC
            onFilesChange={async (newFileList) => {
              if (newFileList.length > 0) {
                const urls = []; // 创建一个数组来存储所有的 URL

                for (const file of newFileList) {
                  const formData = new FormData();
                  formData.append('file', file.originFileObj as RcFile);

                  const res = await postOrderErpOrderStagesUpload({
                    data: formData,
                    headers: {
                      'Content-Type':
                        'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
                    },
                  });

                  const url = res.data; // 获取响应中的 URL
                  urls.push(url); // 将每个 URL 追加到数组中
                }

                // 将所有 URL 使用 ',' 进行拼接
                const combinedUrl = urls.join(',');
                form.setFieldValue('url', combinedUrl); // 设置表单字段值为拼接后的 URL
              } else {
                form.setFieldValue('url', null); // 如果没有文件,则清空 URL
              }
            }}
          ></UploadC>
        </Col>
      </Row> */}
    </ModalForm>
  );
};