import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { Form } from 'antd';
import { EditableProTable, ProFormItem } from '@ant-design/pro-components';
import { compact, isEmpty, pick, map, uniqueId, includes, find } from 'lodash';
import SelectedPolicy from './selected.policys';
import { getIndustryList } from './action';
import { useState } from 'react';
import { useRoutes } from '@component/utils';
const editColumns = [
    {
        title: '保单号',
        dataIndex: 'policyNumber',
        readonly: true,
    },
    {
        title: '被服务对象',
        dataIndex: 'serviceObjectName',
        renderText: (_, record) => record.customerName || record.serviceObjectName || '-',
        readonly: true,
    },
    {
        title: '归属机构',
        dataIndex: 'belongToHandlerOrganName',
        renderText: (_, record) => record.insuranceName || record.belongToHandlerOrganName || '-',
        readonly: true,
    },
    {
        title: '归属经办人',
        dataIndex: 'belongToHandlerUserName',
        readonly: true,
        renderText(_, item) {
            return compact([
                item.belongToHandlerUserName,
                item.belongToHandlerCode,
            ]).join(',');
        },
    },
    {
        title: (_jsxs(_Fragment, { children: [_jsx("span", Object.assign({ style: { color: 'red' } }, { children: "*" })), "\u7BA1\u7406\u5206\u7C7B"] })),
        dataIndex: 'type',
        valueType: 'select',
        request: getIndustryList,
        fieldProps: { placeholder: '请输入选择管理分类', labelInValue: true },
    },
    {
        title: '企业联系人',
        dataIndex: 'contactsName',
        valueType: 'text',
        fieldProps: { placeholder: '请输入企业联系人' },
    },
    {
        title: '企业联系电话',
        dataIndex: 'contactsPhone',
        valueType: 'text',
        fieldProps: { placeholder: '请输入企业联系电话' },
    },
    {
        title: '企业邮箱',
        dataIndex: 'email',
        valueType: 'text',
        fieldProps: { placeholder: '请输入企业邮箱' },
    },
    {
        title: '操作',
        valueType: 'option',
        width: 70,
        fixed: 'right',
        render: () => {
            return null;
        },
    },
];
export default function ({ disabled, flag = false, setFlag }) {
    const form = Form.useFormInstance();
    const serviceTypeId = Form.useWatch('serviceTypeId', form);
    const aqServiceStandardCategory = Form.useWatch('aqServiceStandardCategory', form);
    const serviceObject = Form.useWatch('serviceObject', form);
    const serviceClassifyType = serviceTypeId === null || serviceTypeId === void 0 ? void 0 : serviceTypeId.serviceClassifyType;
    const [isShow, setIsShow] = useState(false);
    const { paramsParse } = useRoutes();
    function onOk(selectedRowOptions) {
        var _a;
        if (!isEmpty(selectedRowOptions)) {
            const data = [];
            const selected = selectedRowOptions.map((item) => {
                return Object.assign(Object.assign({}, pick(item, [
                    'policyId',
                    'policyNumber',
                    'customerId',
                    'customerName',
                    'contactsName',
                    'contactsPhone',
                    'belongToHandlerOrganId',
                    'belongToHandlerOrganName',
                    'belongToHandlerCode',
                    'belongToHandlerUserName',
                    'belongToHandlerNumber',
                    'insuranceId',
                    'insuranceName',
                    'serviceObjectId',
                    'serviceObjectName',
                ])), { contactsName: item.contactsName || '', contactsPhone: item.phone || item.contactsPhone || '', email: item.email || '', type: item.typePid
                        ? {
                            value: item.typePid,
                            label: item.typePname,
                        }
                        : null });
            });
            for (const selectedElement of selected) {
                const item = find(serviceObject, [
                    'policyId',
                    selectedElement.policyId,
                ]);
                if (item) {
                    data.push(item);
                }
                else {
                    selectedElement.id = uniqueId();
                    data.push(selectedElement);
                }
            }
            form.setFieldsValue({
                serviceObject: data,
            });
            if (isShow) {
                form.setFieldsValue({
                    address: null,
                });
            }
            if (serviceClassifyType !== 'jizhongfuwu') {
                if ((paramsParse === null || paramsParse === void 0 ? void 0 : paramsParse.reSubmit) && flag)
                    return setFlag(false);
                if (isShow) {
                    form.setFieldValue('serviceName', `${((_a = selectedRowOptions[0]) === null || _a === void 0 ? void 0 : _a.customerName) || ''}${(aqServiceStandardCategory === null || aqServiceStandardCategory === void 0 ? void 0 : aqServiceStandardCategory.label) || ''}`);
                }
            }
        }
    }
    return (_jsx(SelectedPolicy, Object.assign({ disabled: disabled, name: "serviceObject", serviceClassifyType: serviceClassifyType, onConfirm: onOk, rowSelectionType: serviceClassifyType === 'jizhongfuwu' ? 'checkbox' : 'radio' }, { children: ({ handleOpen, setSelectedRowOptions }) => (_jsx(_Fragment, { children: _jsx(ProFormItem, Object.assign({ label: "\u9009\u62E9\u4FDD\u5355", required: true, labelCol: {
                    span: 3,
                }, name: "serviceObject", trigger: "onValuesChange", rules: [
                    () => ({
                        validator(_, value) {
                            var _a;
                            if (isEmpty(value)) {
                                return Promise.reject(new Error('请选择保单'));
                            }
                            let message = '';
                            for (const valueElement of value) {
                                // if (!valueElement.contactsName) {
                                // 	message = '请输入企业联系人';
                                // 	break;
                                // }
                                //
                                // if (!valueElement.contactsPhone) {
                                // 	message = '请输入企业联系电话';
                                // 	break;
                                // }
                                //
                                // if (!phoneReg.test(valueElement.contactsPhone)) {
                                // 	message = '请输入正确的企业联系电话';
                                // 	break;
                                // }
                                // if (!valueElement.email) {
                                // 	message = '请输入企业邮箱';
                                // 	break;
                                // }
                                // if (!emailReg.test(valueElement.email)) {
                                // 	message = '请输入正确的企业邮箱';
                                // 	break;
                                // }
                                if (!((_a = valueElement === null || valueElement === void 0 ? void 0 : valueElement.type) === null || _a === void 0 ? void 0 : _a.value)) {
                                    message = '请选择管理分类';
                                    break;
                                }
                            }
                            if (message) {
                                return Promise.reject(new Error(message));
                            }
                            return Promise.resolve();
                        },
                    }),
                ], colProps: {
                    span: 24,
                } }, { children: _jsx(EditableProTable, { tableStyle: {
                        display: isEmpty(serviceObject) ? 'none' : 'block',
                        marginBottom: 10,
                    }, size: "small", tableClassName: "tableClassName", rowKey: "id", toolBarRender: false, columns: editColumns, recordCreatorProps: {
                        creatorButtonText: '选择保单',
                        disabled: disabled || !serviceClassifyType,
                        onClick: () => {
                            handleOpen();
                            setIsShow(true);
                        },
                        parentKey: Date.now(),
                        style: {
                            margin: 0,
                        },
                    }, editable: {
                        type: 'multiple',
                        editableKeys: map(serviceObject, 'id'),
                        actionRender: (row, config, defaultDoms) => {
                            if (disabled) {
                                return null;
                            }
                            return [defaultDoms.delete];
                        },
                        onChange: (editableKeys, editableOptions) => {
                            form.setFieldsValue({
                                serviceObject: editableOptions,
                            });
                            setSelectedRowOptions(editableOptions);
                        },
                    } }) })) })) })));
}