import React, { FC, FormEvent, useCallback, useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { IDialogProps } from '~/redux/modal/constants';
import { BetterScrollDialog } from '~/containers/dialogs/BetterScrollDialog';
import { Padder } from '~/components/containers/Padder';
import { DialogTitle } from '~/components/dialogs/DialogTitle';
import { Group } from '~/components/containers/Group';
import { InputText } from '~/components/input/InputText';
import styles from './styles.scss';
import { selectAuthRegisterSocial } from '~/redux/auth/selectors';
import * as AUTH_ACTIONS from '~/redux/auth/actions';
import { useCloseOnEscape } from '~/utils/hooks';
import { LoginSocialRegisterButtons } from '~/containers/dialogs/LoginSocialRegisterButtons';

const mapStateToProps = selectAuthRegisterSocial;
const mapDispatchToProps = {
  authSetRegisterSocialErrors: AUTH_ACTIONS.authSetRegisterSocialErrors,
  authSetRegisterSocial: AUTH_ACTIONS.authSetRegisterSocial,
  authSendRegisterSocial: AUTH_ACTIONS.authSendRegisterSocial,
};

type Props = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & IDialogProps & {};

const LoginSocialRegisterDialogUnconnected: FC<Props> = ({
  onRequestClose,
  errors,
  error,

  authSetRegisterSocialErrors,
  authSetRegisterSocial,
  authSendRegisterSocial,
}) => {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');

  const onSubmit = useCallback(
    (event: FormEvent) => {
      event.preventDefault();
      authSendRegisterSocial(username, password);
    },
    [username, password, authSendRegisterSocial]
  );

  useEffect(() => {
    if (errors.username) authSetRegisterSocialErrors({ username: '' });
  }, [username]);

  useEffect(() => {
    if (errors.password) authSetRegisterSocialErrors({ password: '' });
  }, [password]);

  useEffect(() => {
    if (error) authSetRegisterSocial({ error: '' });
  }, [username, password]);

  useCloseOnEscape(onRequestClose);

  return (
    <form onSubmit={onSubmit}>
      <BetterScrollDialog
        onClose={onRequestClose}
        width={300}
        error={error}
        footer={<LoginSocialRegisterButtons />}
      >
        <Padder>
          <div className={styles.wrap}>
            <Group>
              <DialogTitle>Добро пожаловать в семью!</DialogTitle>

              <InputText
                handler={setUsername}
                value={username}
                title="Юзернэйм"
                error={errors.username}
              />

              <InputText
                handler={setPassword}
                value={password}
                title="Пароль"
                type="password"
                error={errors.password}
              />

              <label className={styles.check}>
                <input type="checkbox" />
                <span>Это не мои штаны сушатся на радиаторе в третьей лаборатории</span>
              </label>
            </Group>
          </div>
        </Padder>
      </BetterScrollDialog>
    </form>
  );
};

const LoginSocialRegisterDialog = connect(
  mapStateToProps,
  mapDispatchToProps
)(LoginSocialRegisterDialogUnconnected);

export { LoginSocialRegisterDialog };