import { Space, Table, Button, Popconfirm, notification, Divider, Checkbox, Spin } from 'antd';
import React, { useState, useEffect, useCallback } from 'react';
import VisibleRoleModal from '@/pages/platformCenter/messageManage/projectManage/components/RolseSelect/VisibleRoleModal';
import { PlusOutlined, UserAddOutlined } from '@ant-design/icons';
import styles from '../dimensionsConfig.less';
import {
  deleteConfig,
  SettingRoleWebSchema,
  SetServiceConfig,
  DeleteWebSchema,
  GetWebSchemaList,
  GetSchemaInfoList,
  IsActionWebSchema,
} from '@/services/webConfig/api';
import RoleModal from '../../schemeConfig/solutionConfig/RoleModal';
import AddModal from './AddModal';
const VectorData = props => {
  const [treeLoading, setTreeLoading] = useState(false); // 弹窗显示
  const [schemename, setSchemename] = useState([]);
  const [record, setRecord] = useState({}); // 选中关联角色的方案名
  const [webCurrent, setWebCurrent] = useState(0); // web列表下标
  const [handCurrent, setHandCurrent] = useState(0); // hand列表下标
  const [webData, setWebData] = useState([]); // web数据
  const [handData, setHandData] = useState([]); // 手持数据
  const [visible, setVisible] = useState(false); // 弹窗
  const [flag, setFlag] = useState(0); // 更新list
  const [handStatus, setHandStatus] = useState([]); // 更新状态
  const [webStatus, setWebStatus] = useState([]); // 更新状态
  const [type, setType] = useState(''); // 弹窗类型
  const [checkLoading, setCheckLoading] = useState(false);
  const [formObj, setFormObj] = useState({ user: 'admin', password: 'geoserver' });
  const [addVisible, setAddVisible] = useState(false);
  const [checkValue, setCheckValue] = useState([]);

  const columns = [
    {
      title: '默认方案',
      align: 'center',
      render: (text, record, index) => (
        <Space>
          <Checkbox
            checked={webStatus[index + webCurrent * 5]}
            onChange={e => {
              onChangeCheck(e, record, index + webCurrent * 5);
            }}
          />
        </Space>
      ),
    },
    {
      title: '方案名',
      align: 'center',
      render: (text, record, index) => <Space>{record.scheme.schemename}</Space>,
    },
    {
      title: '关联角色',
      align: 'center',
      render: record => (
        <Space size="middle">
          <UserAddOutlined
            onClick={() => pickRole(record)}
            style={{ fontSize: '18px', color: '#1890FF' }}
          />
        </Space>
      ),
    },
    {
      title: '编辑',
      align: 'center',
      render: (text, record, index) => (
        <Space>
          <div onClick={e => e.stopPropagation()}>
            <Popconfirm
              title="是否删除此条方案?"
              okText="确认"
              cancelText="取消"
              onConfirm={() => {
                delWebConfirm(record);
              }}
            >
              <Button size="small" danger>
                删除
              </Button>
            </Popconfirm>
          </div>
        </Space>
      ),
    },
  ];
  // const columns1 = [
  //     {
  //         title: '查询方案',
  //         align: 'center',
  //         render: (text, record, index) => (
  //             <Space>
  //                 <Checkbox
  //                     checked={handStatus[index + handCurrent * 5]}
  //                     onChange={e => {
  //                         onChangeHand(e, record, index + handCurrent * 5);
  //                     }}
  //                 />
  //             </Space>
  //         ),
  //     },
  //     {
  //         title: '方案名',
  //         align: 'center',
  //         render: (text, record, index) => (
  //             <Space>
  //               {record.scheme.schemename}
  //             </Space>
  //         ),
  //     },
  //     {
  //         title: '关联角色',
  //         align: 'center',
  //         render: (text, record, index) => (
  //             <Space>
  //                 <div onClick={() => pickRole(record)} style={{ cursor: 'pointer' }}>
  //                     <VisibleRoleModal onSubmit={onPushSubmit} title={"关联角色"} initValues ={record.roles!=null?record.roles.split(","):[]} operate={<UserAddOutlined />} />
  //                 </div>
  //             </Space>
  //         ),
  //     },
  //     {
  //         title: '编辑',
  //         align: 'center',
  //         render: (text, record, index) => (
  //             <Space>
  //                 <div onClick={e => e.stopPropagation()}>
  //                     <Popconfirm
  //                         title="是否删除此条方案?"
  //                         okText="确认"
  //                         cancelText="取消"
  //                         onConfirm={() => {
  //                             delhandConfirm(record);
  //                         }}
  //                     >
  //                         <Button size="small" danger>
  //                             删除
  //                         </Button>
  //                     </Popconfirm>
  //                 </div>
  //             </Space>
  //         ),
  //     }

  // ];
  // 获取选中的角色
  const onPushSubmit = value => {
    setAddVisible(false);
    if (value.length) {
      let query = {
        schemaname: record.scheme.schemename,
        roles: value.join(','),
      };
      SettingRoleWebSchema(query)
        .then(res => {
          if (res.code === 0) {
            prompt('success', '关联角色成功');
            setFlag(flag + 1);
          } else {
            prompt('fail', '关联角色失败');
          }
        })
        .catch(err => {
          prompt('fail', '网络请求失败');
        });
    }
  };
  // 获取角色
  const pickRole = e => {
    setRecord(e);
    setAddVisible(true);
    let arr = e.roles != null ? e.roles.split(',') : [];
    console.log(arr);
    setCheckValue(arr);
  };
  // 设置web方案
  const onChangeCheck = (e, record, index) => {
    setCheckLoading(true);
    IsActionWebSchema({ schemaname: record.scheme.schemename }).then(res => {
      setCheckLoading(false);
      if (res.msg === '') {
        prompt('success', '设置成功');
        setFlag(flag + 1);
      } else {
        prompt('fail', res.msg);
      }
    });
  };

  // 选择手持方案
  const onChangeHand = (e, record, index) => {
    setCheckLoading(true);
    const newLoadings = [...handStatus];
    newLoadings.map((item, loadIndex) => {
      return loadIndex == index
        ? (newLoadings[loadIndex] = !newLoadings[loadIndex])
        : (newLoadings[loadIndex] = false);
    });
    setHandStatus(newLoadings);
    let query = {
      schemename: record['schemename'],
      terminalType: 'phone',
      isBaseMap: false,
      jsonCfg: JSON.stringify({
        isDefault: newLoadings[index],
      }),
    };
    if (!newLoadings[index]) {
      SetServiceConfig(query).then(res => {
        setCheckLoading(false);
        if (res.code == '0') {
          const changehandData = [...handData];
          changehandData[index].isDefault = false;
          setHandData(changehandData);
          prompt('success', '设置成功');
        } else {
          prompt('fail', `${record['schemename']}默认设置时遇到错误:` + res.message);
        }
      });
      return;
    }
    var beforeDefault = handData.findIndex(item => item['isDefault']);
    SetServiceConfig({
      schemename: record['schemename'],
      terminalType: 'phone',
      isBaseMap: false,
      jsonCfg: JSON.stringify({
        isDefault: true,
      }),
    }).then(res => {
      setCheckLoading(false);
      if (res.code == '0') {
        const changehandData = [...handData];
        changehandData[index].isDefault = true;
        setHandData(changehandData);
        if (beforeDefault != -1) {
          SetServiceConfig({
            schemename: changehandData[beforeDefault].schemename,
            terminalType: 'phone',
            isBaseMap: false,
            jsonCfg: JSON.stringify({
              isDefault: false,
            }),
          }).then(res => {
            setCheckLoading(false);
            if (res.IsSuccess) {
              const changehandData1 = [...handData];
              changehandData1[beforeDefault].isDefault = false;
              setHandData(changehandData1);
              prompt('success', '设置成功');
              return;
            }
            prompt('fail', `${record['schemename']}默认设置时遇到错误:` + res.message);
          });
        }
      }
    });
  };
  const prompt = (type, content) => {
    if (type == 'success') {
      notification.success({
        message: '提示',
        duration: 3,
        description: content,
      });
    } else {
      notification.error({
        message: '提示',
        duration: 3,
        description: content,
      });
    }
  };
  const onSubmit = prop => {
    setVisible(false);
    setFlag(flag + 1);
  };
  // 删除web配置方案
  const delWebConfirm = record => {
    DeleteWebSchema(record.scheme.schemename).then(res => {
      if (res.msg === '') {
        prompt('success', '删除成功');
        setFlag(flag + 1);
      } else {
        prompt('fail', '删除失败');
      }
    });
  };
  // 删除手持配置方案
  const delhandConfirm = record => {
    deleteConfig({
      schemename: record['schemename'],
      terminalType: 'phone',
      isBaseMap: false,
    }).then(res => {
      if (res.code == '0') {
        prompt('success', '删除成功');
        setFlag(flag + 1);
      } else {
        prompt('fail', '删除失败');
      }
    });
  };
  // 添加方案
  const addType = type => {
    setType(type);
    let listData = [];
    type == 'add' ? (listData = webData) : (listData = handData);
    let webSchemenameArr = [],
      schemeArr = [];
    setTreeLoading(true);
    GetSchemaInfoList().then(res => {
      if (res.data && res.data.length) {
        setTreeLoading(false);
        listData.map(item => {
          webSchemenameArr.push(item.scheme.schemename);
        });
        res.data.map(item => {
          if (!webSchemenameArr.includes(item.schemename)) schemeArr.push(item.schemename);
        });
        setSchemename(schemeArr);
        if (schemeArr.length) {
          setVisible(true);
        } else {
          notification.warning({
            message: '提示',
            duration: 3,
            description: '请先配置方案',
          });
        }
      } else {
        setTreeLoading(false);
        notification.warning({
          message: '提示',
          duration: 3,
          description: '请先配置方案',
        });
      }
    });
  };
  useEffect(() => {
    renderTile();
  }, [flag]);
  // 获取瓦片数据配置数据
  const renderTile = () => {
    setCheckLoading(true);
    // 查询手持方案
    // var schemeConfigQueryRequest = GetMaplayerByTerminalType({
    //     terminalType: 'phone',
    //     isBaseMap: false
    // })
    // 查询web方案
    var webSchemeQueryRequest = GetWebSchemaList();
    Promise.all([webSchemeQueryRequest])
      .then(res => {
        // if (res[0].msg==="Ok" && res[0].data.phone) {
        //     let arr = []
        //     res[0].data.phone.optionalLayer.layers.map((item, index) => {
        //         if (item.isDefault) {
        //             arr.push(true)
        //         } else {
        //             arr.push(false)
        //         }

        //         item.isStatus = 'phone'
        //         return item
        //     })
        //     setHandData(res[0].data.phone.optionalLayer.layers)
        //     setHandStatus(arr)

        // }
        if (res[0].msg === 'Ok' && res[0].data) {
          let arr = [];
          res[0].data.map((item, index) => {
            if (item.isDefault) {
              arr.push(true);
            } else {
              arr.push(false);
            }
            item.isStatus = 'web';
            return item;
          });
          setWebData(res[0].data);
          setWebStatus(arr);
        }
        setCheckLoading(false);
      })
      .catch(e => {
        setCheckLoading(false);
      });
  };

  const rolCallBack = useCallback(list => {
    let strList = [];
    if (list.length > 0) {
      list.forEach(item => {
        console.log(item, 'item');
        Object.keys(item.last).forEach(i => {
          strList.push(i);
        });
      });
      console.log(strList);
      onPushSubmit(strList);
    }
  });

  return (
    <>
      <Spin tip="loading..." spinning={checkLoading}>
        <div className={styles.solutionConfig}>
          <div>
            <Divider orientation="left">
              <div className={styles.divider}>
                {' '}
                Web{' '}
                <PlusOutlined
                  onClick={() => {
                    addType('add');
                  }}
                  className={styles.dividerIcon}
                />
              </div>
            </Divider>
            <Table
              columns={columns}
              dataSource={webData}
              bordered
              style={{ height: 'calc(100vh - 230px)' }}
              pagination={{
                showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条`,
                defaultPageSize: 8,
                onChange: value => {
                  setWebCurrent(value - 1);
                },
              }}
              rowKey={(record, index) => record.scheme.schemename}
              scroll={{ y: 300 }}
            />
          </div>
          {/* <Divider orientation="left"><div className={styles.divider}>手持 <PlusOutlined
                        onClick={() => { addType('addHand') }}
                        className={styles.dividerIcon} /></div> </Divider>
                    <Table
                        columns={columns1}
                        dataSource={handData}
                        bordered
                        rowKey="schemename"
                        scroll={{ y: 400 }}
                        pagination={{
                            showTotal: (total, range) =>
                                `第${range[0]}-${range[1]} 条/共 ${total} 条`,
                            defaultPageSize: 8,
                            onChange: (value) => {
                                setHandCurrent(value - 1)
                            }

                        }}
                    >
                    </Table> */}
        </div>
      </Spin>
      <AddModal
        visible={visible}
        onCancel={() => setVisible(false)}
        callBackSubmit={onSubmit}
        type={type}
        formObj={formObj}
        listData={schemename}
      />
      <RoleModal
        selectValue={checkValue.toString()}
        visible={addVisible}
        rolCallBack={roleList => rolCallBack(roleList)}
        onCancel={() => {
          setAddVisible(false);
        }}
      />
    </>
  );
};
export default VectorData;