/* eslint-disable indent */
/* eslint-disable object-shorthand */
import React, { useState, useEffect } from 'react';
import classnames from 'classnames';
import { Popconfirm, notification, Card, Button, message, Tooltip } from 'antd';
import {
  unbindSchemeBaseMap,
  GettMaplayer,
  SetServiceConfig,
  deleteConfig,
  GetbaseMapschemeName,
} from '@/services/webConfig/api';
import {
  CloseOutlined,
  PlusOutlined,
  GlobalOutlined,
  BlockOutlined,
  FormOutlined,
} from '@ant-design/icons';
import AddModal from '../AddModal';
import EditModal from '../EditModal';
import MapScope from '@/components/MapScope';
import { createGuid } from '@/utils/transformUtil';
import AddModalBase from '../AddModalBase';
import styles from '../../SchemeConfig.less';
const CardData = props => {
  const { deletebaseMaps = () => {}, item, cardFlag, keepData, nameData } = props;
  const [visible, setVisible] = useState(false); // 弹窗
  const [basevisible, setBaseVisible] = useState(false); // 弹窗
  const [flag, setFlag] = useState(0); // 状态更新
  const [type, setType] = useState(''); // 弹窗类型
  const [formObj, setFormObj] = useState({});
  const [serviceList, setServiceList] = useState([]);
  const [mapScopeVisible, setMapScopeVisible] = useState(false);
  const [cardData, setCardData] = useState([]);
  const [editVisible, setEditVisible] = useState(false);
  // 删除瓦片

  useEffect(() => {
    // GettMaplayer({ terminalType: 'base', isBaseMap: true }).then(res => {
    //   if (res.msg === 'Ok') {
    //     let arr = [];
    //     res.data.general.baseMap.layers.map(i => {
    //       arr.push(i.servicename);
    //     });
    //   }
    // });
    setCardData(keepData);
    console.log(props.item);
  }, [cardFlag]);

  const deletebaseMap = (item, baseMapItem) => {
    console.log(item);
    console.log(props.item.defaultOldBaseMap);
    console.log(baseMapItem);
    let j = props.item.defaultOldBaseMap.indexOf(baseMapItem);
    let i = props.item.defaultBaseMap;
    console.log(j);
    console.log(i);
    if (item.baseMap.length > 1) {
      unbindSchemeBaseMap({ schemename: item.schemename, basemapName: baseMapItem }).then(res => {
        if (res.code == '0') {
          if (j == i) {
            SetServiceConfig({
              schemename: props.item.schemename,
              terminalType: 'scheme',
              isBaseMap: false,
              jsonCfg: JSON.stringify({
                defaultBaseMap: 0,
              }),
            }).then(resdata => {
              if (resdata.code == '0') {
                deletebaseMaps();
              }
            });
          } else if (j < i) {
            SetServiceConfig({
              schemename: props.item.schemename,
              terminalType: 'scheme',
              isBaseMap: false,
              jsonCfg: JSON.stringify({
                defaultBaseMap: i - 1,
              }),
            }).then(resdata => {
              if (resdata.code == '0') {
                deletebaseMaps();
              }
            });
          } else {
            deletebaseMaps();
          }
          notification.success({
            message: '提示',
            duration: 3,
            description: '底图方案删除成功',
          });
        } else {
          notification.error({
            message: '提示',
            duration: 3,
            description: '底图方案删除失败',
          });
        }
      });
    } else {
      message.warning('方案至少需要一张底图');
    }
  };
  // 删除方案
  const deleteTile = item => {
    deleteConfig({
      schemename: item.schemename,
      terminalType: 'scheme',
      isBaseMap: false,
    }).then(res => {
      if (res.code == '0') {
        notification.success({
          message: '提示',
          duration: 3,
          description: '方案删除成功',
        });
        deletebaseMaps();
      } else {
        notification.error({
          message: '提示',
          duration: 3,
          description: '方案删除失败',
        });
      }
    });
  };
  const onSubmit = prop => {
    setVisible(false);
    deletebaseMaps();
    setBaseVisible(false);
  };

  // 增加瓦片
  const addTile = value => {
    let serverList = [];
    setFormObj(value);
    if (JSON.stringify(value) != '{}') {
      GettMaplayer({ terminalType: 'base', isBaseMap: true }).then(res => {
        if (res.code == '0') {
          res.data.general.baseMap.layers.map(item => {
            if (value.baseMap.indexOf(item.servicename) == -1) {
              serverList.push(item.servicename);
            }
          });
        }
        let arr = [];
        GetbaseMapschemeName().then(resdata => {
          if (resdata.data.length) {
            resdata.data.map(i => {
              if (value.baseMap.indexOf(i) == -1) {
                arr.push(i);
              }
            });
            if (arr.length) {
              setServiceList(arr);
              setType('add');
              setVisible(true);
            } else {
              notification.warning({
                message: '提示',
                duration: 3,
                description: '请先在底图配置-配置底图分级显示方案',
              });
            }
          } else {
            notification.warning({
              message: '提示',
              duration: 3,
              description: '请先在底图配置-配置底图分级显示方案',
            });
          }
        });
      });
    }
  };

  const addTileBase = value => {
    let serverList = [];
    setFormObj(value);
    if (JSON.stringify(value) != '{}') {
      GettMaplayer({ terminalType: 'base', isBaseMap: true }).then(res => {
        if (res.code == '0') {
          res.data.general.baseMap.layers.map(item => {
            if (value.baseMap.indexOf(item.servicename) == -1) {
              serverList.push(item.servicename);
            }
          });
        }
        if (serverList.length) {
          setServiceList(serverList);
          setType('add');
          setBaseVisible(true);
        } else {
          notification.warning({
            message: '提示',
            duration: 3,
            description: '请先在基础配置-配置底图',
          });
        }
      });
    }
  };

  const editTile = value => {
    setFormObj(value);
    setEditVisible(true);
  };

  const submitExtent = (extent, areaName, flag) => {
    if (flag === 0) {
      notification.warn({
        message: '提交失败',
        description: '请框选范围',
      });
      return;
    }
    const jsConfig = {
      extent: extent,
      areaName: areaName,
      boundColor: '#86c8f8',
      boundWidth: '10px',
      backgroundColor: '#000000',
      backgroundOpacity: '0.6',
    };
    SetServiceConfig({
      schemename: item.schemename,
      terminalType: 'web',
      isBaseMap: false,
      jsonCfg: JSON.stringify(jsConfig),
    }).then(res => {
      if (res.code == '0') {
        setMapScopeVisible(false);
        message.info('范围设置成功');
      }
    });
  };

  const pick = (schemename, baseMapItem) => {
    console.log(schemename);
    console.log(props.item.defaultOldBaseMap);
    let i = props.item.defaultOldBaseMap.indexOf(baseMapItem);
    console.log(i);
    SetServiceConfig({
      schemename: schemename,
      terminalType: 'scheme',
      isBaseMap: false,
      jsonCfg: JSON.stringify({
        defaultBaseMap: i,
      }),
    }).then(res => {
      if (res.code == '0') {
        deletebaseMaps();
        message.success('设置成功');
      } else {
        message.warning(res.msg);
      }
    });
  };

  const onEditSubmit = () => {
    setEditVisible(false);
    deletebaseMaps();
  };

  return (
    <>
      <Card
        title={
          <div>
            <span className={styles.schemeName}>方案名</span>
            {props.item.schemename}
          </div>
        }
        extra={
          <a href="#">
            <Popconfirm
              title="是否删除该方案？"
              okText="确认"
              cancelText="取消"
              onConfirm={() => {
                deleteTile(props.item);
              }}
            >
              <CloseOutlined />
            </Popconfirm>{' '}
          </a>
        }
        style={{ width: 360 }}
      >
        <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '13px' }}>
          <div style={{ display: 'flex', alignItems: 'center' }}>
            <span className={styles.schemeName}>管网</span>{' '}
            <Tooltip title={props.item.servicename}>
              <span
                style={{
                  display: 'inline-block',
                  width: '80px',
                  overflow: 'hidden',
                  textOverflow: 'ellipsis',
                  whiteSpace: 'nowrap',
                }}
              >
                {props.item.servicename}
              </span>
            </Tooltip>
          </div>
          <div style={{ display: 'flex', alignItems: 'center' }}>
            <span className={styles.schemeNameL}>切片管网</span>{' '}
            <Tooltip title={props.item.tileMaps}>
              <span
                style={{
                  display: 'inline-block',
                  width: '80px',
                  overflow: 'hidden',
                  textOverflow: 'ellipsis',
                  whiteSpace: 'nowrap',
                }}
              >
                {props.item.tileMaps}
              </span>
            </Tooltip>
          </div>
          <div>
            <FormOutlined
              style={{ marginRight: '10px', color: '#1890ff' }}
              onClick={() => editTile(props.item)}
            />
          </div>
        </div>

        {/* <div>
          <span className={styles.schemeName}>范围</span>
          <Button
            style={{ width: '12rem', marginBottom: '0.5rem' }}
            onClick={() => setMapScopeVisible(true)}
          >
            选择范围
          </Button>
        </div> */}
        <div className={styles.schemeItem}>
          {/* <span className={styles.schemeName}>底图方案</span> */}
          <Button className={styles.schemeBtn} onClick={() => addTileBase(props.item)}>
            {' '}
            <GlobalOutlined />
            添加基础底图
          </Button>
          <Button className={styles.schemeBtn} onClick={() => addTile(props.item)}>
            {' '}
            <BlockOutlined />
            添加分级底图
          </Button>
        </div>
        <div style={{ overflowY: 'scroll', height: '11.4rem' }}>
          {props.item.baseMap && props.item.baseMap.length
            ? props.item.baseMap.map((baseMapItem, baseindex) => (
                <div className={styles.mapItem} key={baseindex}>
                  <div
                    onClick={() => pick(props.item.schemename, baseMapItem)}
                    className={classnames({
                      [styles.defaultTile]: true,
                      [styles.activeTile]: baseindex == props.item.defaultBaseMap,
                    })}
                  >
                    默认
                    {cardData.indexOf(baseMapItem) == -1 ? (
                      <BlockOutlined style={{ marginTop: '5px' }} />
                    ) : (
                      <GlobalOutlined style={{ marginTop: '5px' }} />
                    )}
                  </div>
                  <div className={styles.mapText}>
                    <Tooltip title={baseMapItem}>{baseMapItem}</Tooltip>
                  </div>
                  <div className={styles.mapIcon}>
                    <Popconfirm
                      title={
                        cardData.indexOf(baseMapItem) == -1 ? (
                          <span>是否删除该分级底图？</span>
                        ) : (
                          <span>是否删除该底图？</span>
                        )
                      }
                      okText="确认"
                      cancelText="取消"
                      onConfirm={() => {
                        deletebaseMap(props.item, baseMapItem);
                      }}
                    >
                      <CloseOutlined />
                    </Popconfirm>{' '}
                  </div>
                </div>
              ))
            : ''}
        </div>
      </Card>
      <AddModal
        visible={visible}
        onCancel={() => setVisible(false)}
        callBackSubmit={onSubmit}
        type={type}
        serviceList={serviceList}
        formObj={formObj}
        nameData={nameData}
      />
      <EditModal
        visible={editVisible}
        onCancel={() => setEditVisible(false)}
        callBackSubmit={onEditSubmit}
        formObj={formObj}
      />
      <AddModalBase
        visible={basevisible}
        onCancel={() => setBaseVisible(false)}
        callBackSubmit={onSubmit}
        type={type}
        serviceList={serviceList}
        formObj={formObj}
        nameData={nameData}
      />
      <MapScope
        mapId={createGuid()}
        visible={mapScopeVisible}
        onCancel={() => setMapScopeVisible(false)}
        confirmModal={submitExtent}
        schemename={props.item.schemename}
        title={props.item.schemename}
      />
    </>
  );
};
export default CardData;
