import React, { useEffect, useState } from 'react';
import { Card, Form, Input, Button, Select, message, Divider, Spin, Row, Col } from 'antd';
import {
  GetMessageConfigInfo,
  SaveSystemInfo,
  ConnectMessPlatform,
  GetBasicInfo,
  GetDataBaseConfig,
} from '@/services/hostmanager/hostmanager';
import { GetMessageVersion } from '@/services/messagemanage/messagemanage';
import { CloseCircleFilled } from '@ant-design/icons';
import CryptoJS from 'crypto-js';
import message11 from '../../../../assets/images/icons/消息.svg';
import Yes from '../../../../assets/images/icons/正确.svg';
import styles from './messageConfig.less';

const layout = {
  labelCol: { span: 2 },
  wrapperCol: { span: 21 },
};
const tailLayout = {
  wrapperCol: { offset: 11, span: 13 },
};
const MessageConfig = () => {
  const [loading, setLoading] = useState(false); // 加载
  const [currentAddress, setCurrentAddress] = useState('');
  const [currentDataBase, setCurrentDataBase] = useState({});
  const [currentSiteInfo, setcurrentSiteInfo] = useState('');
  const [show1, setShow1] = useState('none');
  const [show2, setShow2] = useState('none');
  const [messageVersion, setMessageVersion] = useState('');
  const [flag, setFlag] = useState(0);

  const [form] = Form.useForm();

  const key = CryptoJS.enc.Utf8.parse('1p2a3n4d5a6o7m8s9a10n1e2t3c4o5re'); // 十六位十六进制数作为密钥
  const iv = CryptoJS.enc.Utf8.parse('1234567890000000');

  // 解密
  const Decrypt = word => {
    let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    let decrypt = CryptoJS.AES.decrypt(srcs, key, {
      iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
    });
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
  };

  // 加密
  const Encrypt = word => {
    let srcs = CryptoJS.enc.Utf8.parse(word);
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
      iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
    });
    return encrypted.ciphertext.toString().toUpperCase();
  };
  const onFinish = values => {
    // 先测试连接再保存
    // 1.测试链接
    setLoading(true);
    ConnectMessPlatform({
      messAddress: values.messageAddress,
      sqlServerIP: currentDataBase.ip,
      loginName: currentDataBase.userName,
      password: Encrypt(currentDataBase.password),
      sqlName: currentDataBase.dbName,
      siteCode: currentSiteInfo,
    }).then(res => {
      setLoading(false);
      if (res.code === 0) {
        setShow1('block');
        setShow2('none');
        // 2.保存连接
        SaveSystemInfo({
          configName: '消息平台连接地址',
          configValue: values.messageAddress,
        }).then(resdata => {
          if (resdata.code === 0) {
            message.info('配置保存成功');
          } else {
            message.error(resdata.msg);
          }
        });
      } else {
        setShow1('none');
        setShow2('block');
        message.error(res.msg);
      }
    });
  };

  const getMessageConfig = (CurrentAddress, CurrentDataBase, currentSiteInfo) => {
    setLoading(true);
    ConnectMessPlatform({
      messAddress: CurrentAddress,
      sqlServerIP: CurrentDataBase.ip,
      loginName: CurrentDataBase.userName,
      password: Encrypt(CurrentDataBase.password),
      sqlName: CurrentDataBase.dbName,
      siteCode: currentSiteInfo,
    }).then(res => {
      setLoading(false);
      if (res.code === 0) {
        setShow1('block');
        setShow2('none');
      } else {
        setShow1('none');
        setShow2('block');
        message.error(res.msg);
      }
    });
  };

  const onFinishFailed = errorInfo => {
    console.log('Failed:', errorInfo);
  };

  useEffect(() => {
    form.setFieldsValue({ messageAddress: '127.0.0.1:8231' });
    GetMessageConfigInfo().then(res => {
      if (res.code == 0) {
        setCurrentAddress(res.data);
        if (!res.data || res.data == null) {
          form.setFieldsValue({ messageAddress: '127.0.0.1:8231' });
        } else {
          form.setFieldsValue({ messageAddress: res.data });
        }

        GetDataBaseConfig().then(resdata => {
          if (resdata.code === 0) {
            setCurrentDataBase({ ...resdata.data, password: Decrypt(resdata.data.password) });
            GetBasicInfo().then(reslist => {
              if (reslist.code === 0) {
                setcurrentSiteInfo(reslist.data);
                // getMessageConfig(CurrentAddress, CurrentDataBase, currentSiteInfo);
              }
            });
          }
        });
      } else {
        message.info('获取消息平台配置失败!');
      }
    });
    getMessageVersion();
  }, [flag]);

  const getMessageVersion = () => {
    GetMessageVersion().then(res => {
      console.log(res.data);
      setMessageVersion(res.data);
    });
  };

  const butn = () => {
    console.log(messageVersion);
    let data = '';
    if (messageVersion == '1.0') {
      data = '2.0';
    } else {
      data = '1.0';
    }
    SaveSystemInfo({
      configName: '消息解析规则版本',
      configValue: data,
    }).then(resdata => {
      if (resdata.code === 0) {
        message.info('配置保存成功');
        getMessageVersion();
      } else {
        message.error(resdata.msg);
      }
    });
  };

  return (
    <div className={styles.message_container}>
      <Card style={{ width: '100%', height: 'calc(100vh - 130px)' }}>
        <Spin spinning={loading} tip="loading">
          <Form
            form={form}
            name="basic"
            initialValues={{ remember: true }}
            onFinish={onFinish}
            onFinishFailed={onFinishFailed}
          >
            <div
              style={{
                marginTop: '10px',
                display: 'flex',
                alignItems: 'center',
              }}
            >
              <img src={message11} style={{ height: '16px' }} alt="" />
              <span style={{ marginLeft: '10px', fontWeight: 'bold' }}>消息平台</span>
            </div>
            <Divider />
            <Form.Item
              style={{ marginLeft: '20px', marginBottom: '0px' }}
              // label="服务地址(平台)"
              // name="messageAddress"
              // rules={[
              //   {
              //     required: true,
              //     pattern: new RegExp(
              //       /^(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])(:\d*)$/,
              //       'g',
              //     ),
              //     message: '请输入正确的IP例如:192.168.12.231:8231',
              //   },
              // ]}
            >
              <div style={{ display: 'flex', justifyContent: 'flex-start' }}>
                <Form.Item
                  label="服务地址(平台)"
                  name="messageAddress"
                  rules={[
                    {
                      required: true,
                      pattern: new RegExp(
                        /^(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])(:\d*)$/,
                        'g',
                      ),
                      message: '请输入正确的IP例如:192.168.12.231:8231',
                    },
                  ]}
                >
                  <Input
                    style={{ width: '300px', marginLeft: '15px' }}
                    placeholder="请输入服务地址"
                  />
                </Form.Item>
                <span style={{ display: show1 }}>
                  <img
                    src={Yes}
                    style={{ height: '24px', marginLeft: '26px', marginTop: '10px' }}
                    alt=""
                  />
                </span>
                <span style={{ display: show2 }}>
                  <CloseCircleFilled
                    style={{ fontSize: '24px', marginLeft: '26px', marginTop: '10px' }}
                  />
                </span>
              </div>
            </Form.Item>

            <Form.Item>
              <Button type="primary" htmlType="submit" style={{ marginLeft: '152px' }}>
                保存连接
              </Button>
            </Form.Item>
            <Form.Item label="消息版本" style={{ marginLeft: '67px', marginBottom: '0px' }}>
              <span style={{ marginLeft: '15px', color: 'red', fontWeight: 'bold' }}>
                {messageVersion}
              </span>
            </Form.Item>
            <Form.Item>
              <Button
                type="primary"
                style={{ marginLeft: '152px', marginTop: '13px', width: '88px' }}
                onClick={butn}
              >
                {messageVersion == '1.0' ? '升级' : '回退'}
              </Button>
              <br />
              <br />
              <span style={{ color: 'red', fontWeight: 'bold', marginLeft: '152px' }}>
                提示:web4请使用1.0版本,web5请使用2.0版本,请根据项目的实际情况决定
              </span>
            </Form.Item>
          </Form>
        </Spin>
      </Card>
    </div>
  );
};
export default MessageConfig;