import React, { useRef, useState, useEffect } from 'react';
import { connect, useNavigate } from 'umi';
import { Form, Select, Input, Button, message } from 'antd';
import { useModel } from '@umijs/max';
import { queryDepList } from '@/services/user';
import styles from './index.less';
import { UserOutlined, LockOutlined } from '@ant-design/icons';
import { storeToken } from '@/utils/utils';
const { Option } = Select;

function Login(props) {
  const {
    submitting,
    params,
    dispatch,
  } = props;
  const { run } = useModel('userInfo');
  const [depList, setDepList] = useState([]);
  const [hasName, setHasName] = useState(false);
  const formRef = useRef();
  let navigate = useNavigate();
  const onHandleChange = async (name) => {
    if (!name) {
      setDepList([]);
      setHasName(false);
      return;
    }
    try {
      var res = await queryDepList(name);
      setDepList(res.data);
      setHasName(true);
      formRef.current.setFieldsValue({
        DepId: res.data[0]?.ID + '',
      });
    } catch (error) {
      setDepList([]);
      setHasName(true);
      message.error('用户名不存在');
    }
  };

  const handleSubmit = (values) => {
    dispatch({
      type: 'login/login',
      payload: {
        ...values,
        // 防止浏览器自动填充
        password: values.password2,
      },
      callback: (token) => {
        storeToken(token);
        run();
        navigate("/home");
      },
    });
  };
  useEffect(() => {
    storeToken('');
  }, []);
  return (
    <div className={styles.main}>
      <div className={styles.content}>
        <Form
          name="basic"
          className={styles.inp_box}
          labelCol={{ span: 0 }}
          wrapperCol={{ span: 24 }}
          onFinish={handleSubmit}
          autoComplete="new-password"
          ref={formRef}
        >
          <Form.Item
            label=""
            name="username"
            autoComplete="off"
            rules={[{ required: true, message: '请输入用户名' }]}
          >
            <Input
              prefix={<UserOutlined className={styles.prefixIcon} />}
              className={styles.inp}
              size="large"
              autoComplete="off"
              placeholder="请输入用户名"
              onBlur={(e) => onHandleChange(e.target.value)}
            />
          </Form.Item>
          {hasName && (
            <Form.Item
              label=""
              name="DepId"
              rules={[{ required: true, message: '请选择部门' }]}
            >
              <Select placeholder="请选择部门" size="large">
                {depList.map((item) => (
                  <Option value={item.ID + ''} key={item.ID}>
                    {item.Name}
                  </Option>
                ))}
              </Select>
            </Form.Item>
          )}

          <Form.Item
            label=""
            // 不使用password，防止浏览器自动填充表单
            name="password2"
            className={styles.inp}
            rules={[{ required: true, message: '请输入密码' }]}
          >
            <Input.Password
              prefix={<LockOutlined className={styles.prefixIcon} />}
              className={styles.inp}
              size="large"
              placeholder="请输入密码"
              autoComplete="new-password"
            />
          </Form.Item>

          {/* <Form.Item
          name="remember"
          valuePropName="checked"
          wrapperCol={{ offset: 8, span: 16 }}
        >
          <Checkbox>自动登录</Checkbox>
        </Form.Item> */}

          <Form.Item>
            <Button
              size="large"
              style={{ width: '100%', marginTop: 24 }}
              loading={submitting}
              type="primary"
              htmlType="submit"
            >
              登录
            </Button>
          </Form.Item>
        </Form>
      </div>
    </div>
  );
}

export default connect(({ login, loading }) => ({
  login,
  submitting: loading.effects['login/login'],
}))(Login);
