import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
import { Button, Table, Modal, Descriptions, Select, Form, Input } from 'antd';
import SelectDevice from './selectDevice';

const EventStatus = (props) => {

    const { device, onChange } = props;
    const [visible, setVisible] = useState(false);
    const [curDevice, setCurDevice] = useState(device);

    console.log('getFieldsValue device ---- ', device)

    const handleChange = useCallback((data) => {

        let mDevice = [], tempDevice = data;
        for (let item in tempDevice) {
            const meter = tempDevice[item];
            meter.attr = meter.attr?.map(ele => {

                console.log('ele-----', ele)
                
                // ele.forEach(element => {
                    ele.metaData?.realTimeEvent?.modelEventExtends?.forEach((object, i) => {

                        // if (record.key === ele.id) {
                            object['code'] = i
                        // }

                    });
                // });

                const attr = {
                    ...ele,
                    id: ele.id,
                    meterName: ele.meterName || meter?.meter?.device?.name || '',
                }
                return attr;
            })
        }


        // console.log('handleChange tempDevice ====== ', tempDevice)
        setCurDevice(tempDevice);
        onChange(tempDevice);





    }, []);

    const handleClose = useCallback(() => {
        setVisible(false);
    }, []);

    const handleChangeTableCol = useCallback((key, record, value) => {
        const tempDevice = { ...curDevice };

        console.log('tempDevice record ==== ', record);


        for (let item in tempDevice) {
            const meter = tempDevice[item];
            // 处理事件bit位
            meter.attr?.forEach(element => {
                if (element.id === record.id) {

                    console.log('tempDevice element.id ==== ', element);


                    element.metaData?.realTimeEvent?.modelEventExtends?.forEach((ele, i) => {

                        console.log('tempDevice ele.id ==== ', ele, element.key);

                        if (record.key === ele.id) {
                            ele[key] = value
                        }
                    });
                }
            });
        }

        // tempDevice[record.meterId].attr[index][key] = value;
        console.log('tempDevice ==== ', tempDevice);
        setCurDevice(tempDevice);
        onChange(tempDevice);
    }, [curDevice]);

    const randomColor = useCallback(() => {
        return `#${Math.round(Math.random() * 255).toString(16)}${Math.round(Math.random() * 255).toString(16)}${Math.round(Math.random() * 255).toString(16)}`
    }, []);

    const columns = [
        // { title: '设备', dataIndex: 'meterName' },
        { title: '事件名', dataIndex: 'name' },
        { title: '事件', dataIndex: 'value' },
        { title: '绑定', dataIndex: 'code', render: (value, record) => <input style={{ width: 30 }} defaultValue={value} onChange={(e) => handleChangeTableCol('code', record, e.target.value)} /> },
    ]

    const selectedMeter = useMemo(() => {

        console.log('device =====', device)

        let mDevice = [], tempDevice = { ...device };
        for (let item in tempDevice) {
            const meter = tempDevice[item];
            // 处理事件bit位
            meter.attr?.forEach(element => {
                element.metaData?.realTimeEvent?.modelEventExtends?.forEach((ele, i) => {
                    mDevice.push({...element, key: ele.id, value: ele.value, code: ele.code || i});
                });
            });
        }
        console.log('mDevice =====', mDevice)

        return mDevice;
    }, [device])

    // useEffect(() => {
    //   console.log('==== useEffect onChange ======')
    // }, [curDevice]);

    // useEffect(() => {
    //     console.log('==== useEffect onChange device ======')
    //   }, [device]);


    return (
        <>
            <Table style={{ marginBottom: 20 }} rowKey={res => res.code} size='small' dataSource={props.eventList || []} columns={[
                { title: '状态', dataIndex: 'url', render: val => <img src={val} style={{ maxWidth: 50, maxHeight: 50 }} /> },
                { title: '绑定值', dataIndex: 'code' }
            ]} pagination={false} />

            <Button size='small' onClick={() => setVisible(true)}>选择...</Button>
            {
                selectedMeter && selectedMeter.length > 0  && <div style={{ padding: '15px 0 10px 0' }}>设备:{selectedMeter[0].meterName}</div>
            }
            
            <Table style={{ marginBottom: 20 }} size='small' dataSource={selectedMeter || []} columns={columns} pagination={false} />
            <SelectDevice visible={visible} onChange={handleChange} onClose={handleClose} multiple={false} />
        </>
    )
}

export default memo(EventStatus);