import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { ProTable } from '@ant-design/pro-components';
import { Space, Button, message, Popconfirm } from 'antd';
import { useEffect, useRef, useState } from 'react';
import { getList, getDetailList, onAdd, onDelete } from './action';
import Form from './form';
import { PlusCircleOutlined } from '@ant-design/icons';
import { useRequest, useToggle } from 'ahooks';
import { riskGrade, riskStatus } from '../CONST';
import { dateFormatter, themeMessage } from '@component/utils';
import { CardForm } from '@component/ui';
import { isEmpty, map } from 'lodash';
export default ({ required, title, serviceId, setRiskIds, readonly, type }) => {
    const actionRef = useRef();
    const [value, { set }] = useToggle({
        visible: false,
    });
    const [riskIds, set_riskIds] = useState([]);
    const [dataSource, setDataSource] = useState([]);
    const [loading, setLoading] = useState(false);
    const isMount = useRef(!serviceId ? true : false);
    const { runAsync, confirmLoading } = useRequest(onDelete, {
        manual: true,
        onSuccess(result, params) {
            themeMessage(result);
            if (result.type === 'success') {
                //  刷新列表
                set_riskIds(riskIds.filter((i) => i != params[0].riskId));
            }
        },
        onError(result) {
            message.error(result.message);
        },
    });
    const { run: get_list } = useRequest(getList, {
        manual: true,
        defaultParams: {
            serviceId,
        },
        onSuccess(result) {
            setLoading(false);
            setDataSource(result === null || result === void 0 ? void 0 : result.data);
            setRiskIds(result === null || result === void 0 ? void 0 : result.data);
        },
        onError(result) {
            setLoading(false);
            message.error(result.message);
        },
    });
    const { runAsync: get_Detail_list } = useRequest(getDetailList, {
        manual: true,
    });
    const columns = [
        {
            title: '风险编号',
            dataIndex: 'riskNumber',
            ellipsis: true,
        },
        {
            title: '风险名称',
            dataIndex: 'riskName',
            ellipsis: true,
            search: false,
        },
        {
            title: '风险描述',
            dataIndex: 'riskContent',
            ellipsis: true,
            search: false,
        },
        {
            title: '场所/部位',
            dataIndex: 'discoveredAddress',
            ellipsis: true,
            search: false,
        },
        {
            title: '风险等级',
            dataIndex: 'riskGrade',
            ellipsis: true,
            search: false,
            render(_, item) {
                return riskGrade[item.riskGrade];
            },
        },
        {
            title: '风险状态',
            dataIndex: 'status',
            ellipsis: true,
            search: false,
            render(_, item) {
                return riskStatus[item.status];
            },
        },
        {
            title: '发现时间',
            dataIndex: 'discoveredAt',
            ellipsis: true,
            search: false,
            renderText: dateFormatter,
        },
        {
            title: '操作',
            dataIndex: 'option',
            hideInTable: readonly,
            search: false,
            render(_, item) {
                return (_jsx(Space, { children: _jsx(Popconfirm, Object.assign({ placement: "top", title: "\u786E\u8BA4\u5220\u9664\u5417\uFF1F", onConfirm: () => handleDelete(item), okText: "\u786E\u8BA4", cancelText: "\u53D6\u6D88", getPopupContainer: (node) => {
                            return document.body;
                        }, okButtonProps: { loading: confirmLoading } }, { children: _jsx(Button, Object.assign({ type: "link", danger: true, size: "small" }, { children: "\u5220\u9664" })) })) }));
            },
        },
    ];
    function init(ids) {
        set_riskIds([...riskIds, ids]);
    }
    function handleDelete(item) {
        return runAsync({
            riskId: item.riskId,
        });
    }
    function onCancel() {
        set({
            visible: false,
        });
    }
    useEffect(() => {
        if (!isMount.current && type !== 'add') {
            get_Detail_list({ serviceId }).then((res) => {
                const ids = map(res === null || res === void 0 ? void 0 : res.data, (item) => item.riskId);
                if (!isEmpty(ids)) {
                    setLoading(true);
                    set_riskIds(map(res === null || res === void 0 ? void 0 : res.data, (item) => item.riskId));
                }
            });
        }
    }, []);
    useEffect(() => {
        if (!isMount.current) {
            get_list({ ids: riskIds.join(',') });
        }
        if (isMount.current) {
            isMount.current = false;
        }
    }, [JSON.stringify(riskIds)]);
    return (_jsxs(CardForm, Object.assign({ gutter: [10, 10], title: _jsxs(_Fragment, { children: [required && _jsx("i", Object.assign({ style: { color: 'red' } }, { children: "*" })), title] }), extra: !readonly && (_jsx(Button, Object.assign({ type: "link", size: "small", icon: _jsx(PlusCircleOutlined, {}), onClick: () => set({
                item: null,
                title: '风险评估及管控添加',
                service: onAdd,
                visible: true,
            }) }, { children: "\u6DFB\u52A0" }))) }, { children: [value.visible && (_jsx(Form, { item: value.item, title: value.title, service: value.service, init: init, onCancel: onCancel, serviceid: serviceId })), _jsx(ProTable, { cardProps: {
                    bodyStyle: {
                        padding: 0,
                    },
                }, rowKey: "riskId", actionRef: actionRef, columns: columns, dataSource: dataSource, options: false, search: false, loading: loading, pagination: { pageSize: 10 } })] })));
};