import React, {
    useState, useEffect, useContext
} from 'react';
import { Form, Col, DatePicker, Button, Radio, message, Space, Input } from 'antd';
import apiObj from '@api/index';
import BlockContext from './block-context';
import moment from "moment";
import "moment/locale/zh-cn"
import { getCookie } from '@utils/index'
const { RangePicker } = DatePicker;
const { post, api, xPost } = apiObj;
const { TextArea } = Input;
function EditBlock(props) {
    useEffect(() => {
        if(type == 2){
            setLimit(true)
        }
    }, []);
    const [form] = Form.useForm();
    const [dates, setDates] = useState([]);
    const [limit, setLimit] = useState(false);
    const { blockDetail, type } = useContext(BlockContext);
    const initialValues = blockDetail;
    const onFinish = values => {
        if (type == 1) {
            dataRepari(values)
        } else if (type == 2) {
            dataCompare(values)
        } else {
            editBlock(values)
        }

    };
    function change(e) {
        const { value } = e.target;
        if (type == 1) {
            if (value) {
                setLimit(true)
            } else {
                setLimit(false)
            }
        }

    }
    function editBlock(values) {
        let params = {
            id: blockDetail.id,
            isAudited: values.isAudited,
            lossCause: values.lossCause
        }
        post(api.upBlockLossById, params).then((res) => {
            if (res.data.code === 200) {
                props.userChange()
                message.success(res.data.message);
                form.resetFields();
            } else {
                message.error(res.data.message);
            }
        })
    }
    function disabledDate(current) {
        if (!dates || dates.length === 0) {
            return current && current >= moment().endOf('day');
        }
        const tooLate = dates[0] && current.diff(dates[0], 'days') > 30;
        const tooEarly = dates[1] && dates[1].diff(current, 'days') > 30;
        if (!limit) {
            return current && current >= moment().endOf('day') || tooEarly || tooLate;
        } else {
            return current && current >= moment().endOf('day');
        }
    };
    //数据补录
    function dataRepari(values) {
        values.startDate = moment(values.time[0]).format('YYYY-MM-DD 00:00:00');
        values.endDate = moment(values.time[1]).format('YYYY-MM-DD 23:23:59');
        let params = {
            behospitalCode: values.behospitalCode,
            endDate: values.endDate,
            startDate: values.startDate,
            isPlacefile:getCookie('isPlacefile')
        }
        post(api.dataRepari, params).then((res) => {
            if (res.data.code === 200) {
                props.userChange()
                message.success(res.data.message);
                form.resetFields();
            } else {
                message.error(res.data.message);
            }
        })
    }
    //数据对比
    function dataCompare(values) {
        values.startDate = moment(values.time[0]).format('YYYY-MM-DD 00:00:00');
        values.endDate = moment(values.time[1]).format('YYYY-MM-DD 23:23:59');
        let params = {
            behospitalCode: values.behospitalCode,
            endDate: values.endDate,
            startDate: values.startDate,
            isPlacefile:getCookie('isPlacefile')
        }
        post(api.dataCompare, params).then((res) => {
            if (res.data.code === 200) {
                props.userChange()
                message.success(res.data.message);
                form.resetFields();
            } else {
                message.error(res.data.message);
            }
        })
    }
    function cancel() {
        props.userChange()
    }
    return (
        <>
            <Form
                labelCol={type == 3 ? { span: 8 } : { span: 4 }}
                wrapperCol={{ span: 16 }}
                form={form}
                name="register"
                layout={type == 3 ? 'inline' : 'horizontal'}
                onFinish={onFinish}
                initialValues={initialValues}
                className='block'
            >
                <Col span={12} hidden={type != 3}>
                    <Form.Item
                        name="behospitalCode"
                        label="住院序号"
                    >
                        <span>{initialValues.behospitalCode}</span>
                    </Form.Item>
                </Col>
                <Col span={12} hidden={type != 3}>
                    <Form.Item
                        name="recId"
                        label="文书编号"
                    >
                        <span>{initialValues.recId}</span>
                    </Form.Item>
                </Col>
                <Col span={12} hidden={type != 3}>
                    <Form.Item
                        name="recTitle"
                        label="文书标题"
                    >
                        <span>{initialValues.recTitle}</span>
                    </Form.Item>
                </Col>
                <Col span={12} hidden={type != 3}>
                    <Form.Item
                        name="lossType"
                        label="丢失类型"
                    >
                        <span>{initialValues.lossType == 0 ? '文书丢失' : initialValues.lossType == 1 ? '病案首页丢失' : initialValues.lossType == 2 ? '患者信息丢失' : ''}</span>
                    </Form.Item>
                </Col>
                <Col span={12} hidden={type != 3}>
                    <Form.Item
                        name="lossWay"
                        label="丢失途径"
                    >
                        <span>{initialValues.lossWay == 0 ? '外部丢失' : initialValues.lossWay == 1 ? '内部丢失' : ''}</span>

                    </Form.Item>
                </Col>
                <Col span={12} hidden={type != 3}>
                    <Form.Item
                        name="status"
                        label="状态"
                    >
                        <span>{initialValues.status == 0 ? '已丢失' : initialValues.status == 1 ? '已恢复' : ''}</span>

                    </Form.Item>
                </Col>
                <Col span={24} hidden={type != 3}>
                    <Form.Item
                        name="isAudited"
                        label="核查结果"
                        wrapperCol={{ span: 18 }}
                    >
                        <Radio.Group>
                            <Space size={70} >
                                <Radio value={'1'}>核查通过</Radio>
                                <Radio value={'0'}>核查未通过</Radio>
                            </Space>
                        </Radio.Group>
                    </Form.Item>
                </Col>
                <Col span={24} hidden={type != 3}>
                    <Form.Item
                        name="lossCause"
                        label="丢失原因"
                        wrapperCol={{ span: 18 }}
                    >
                        <TextArea
                            autoSize={{ minRows: 5, maxRows: 5 }}
                        />
                    </Form.Item>
                </Col>


                <Col span={24} hidden={type == 3}>
                    {type != 3 ?
                        <Form.Item label="日期" name="time" rules={[{ required: true }]} labelAlign="right">
                            <RangePicker
                                placeholder={['开始时间', '结束时间']}
                                disabledDate={disabledDate}
                                onCalendarChange={val => setDates(val)}
                            />
                        </Form.Item>
                        : ''}
                </Col>
                <Col span={24} hidden={type == 3} style={{ marginTop: 15 }}>
                    <Form.Item label="住院序号" name="behospitalCode">
                        <Input placeholder="请输入" autoComplete='off' onChange={change} />
                    </Form.Item>
                </Col>
                {
                    type == 1 ?
                        <div style={{ color: '#1690FF' }}>
                            提示：<br />
                            1、补录时间范围限制为30天，每一天数据量的同步时间约为1分钟。<br />
                            时间范围以患者入院时间为准。<br />
                            2、当输入住院序号时，补录将不受时间范围限制。<br />
                        </div>
                        :
                        type == 2 ?
                            <div style={{ color: '#1690FF' }}>
                                提示：将比对所有【已丢失】状态数据和患者入院在时间范围内的数据。
                            </div>
                            : ''
                }
                <Form.Item wrapperCol={type == 3 ? { offset: 24, span: 16 } : { offset: 8, span: 16 }} style={{ marginTop: 15 }}>
                    <Space size="middle" >
                        <Button htmlType="button" onClick={e => cancel()}>
                            取消
                        </Button>
                        <Button type="primary" htmlType="submit">
                            {type == 3 ? '保存' : '确定'}
                        </Button>
                    </Space>
                </Form.Item>

            </Form>
        </>
    );
}

export default EditBlock;