import React, { useEffect, useState } from 'react';
import {
  SessionButton,
  SessionButtonColor,
  SessionButtonType,
} from '../SessionButton';
import { SessionIdEditable } from '../SessionIdEditable';
import { signUp, validatePassword } from './RegistrationTabs';
import { RegistrationUserDetails } from './RegistrationUserDetails';
import { TermsAndConditions } from './TermsAndConditions';
export enum SignUpMode {
  Default,
  SessionIDShown,
  EnterDetails,
}
export interface Props {
  // tslint:disable: react-unused-props-and-state
  generatedRecoveryPhrase: string;
  hexGeneratedPubKey: string;
}
const CreateSessionIdButton = ({
  createSessionID,
}: {
  createSessionID: any;
}) => {
  return (
    
  );
};
const ContinueSignUpButton = ({ continueSignUp }: { continueSignUp: any }) => {
  return (
    
  );
};
const SignUpDefault = (props: { createSessionID: () => void }) => {
  const allUsersAreRandomly = window.i18n('allUsersAreRandomly...');
  return (
    
  );
};
const SignUpSessionIDShown = (props: { continueSignUp: () => void }) => {
  return (
    
      
        {window.i18n('yourUniqueSessionID')}
      
      
      
      
     
  );
};
export const SignUpTab = (props: Props) => {
  const [signUpMode, setSignUpMode] = useState(SignUpMode.Default);
  const [displayName, setDisplayName] = useState('');
  const [password, setPassword] = useState('');
  const [passwordVerify, setPasswordVerify] = useState('');
  const [passwordErrorString, setPasswordErrorString] = useState('');
  const [displayNameError, setDisplayNameError] = useState('');
  const [passwordFieldsMatch, setPasswordFieldsMatch] = useState(false);
  useEffect(() => {
    if (signUpMode === SignUpMode.SessionIDShown) {
      window.Session.setNewSessionID(props.hexGeneratedPubKey);
    }
  }, [signUpMode]);
  if (signUpMode === SignUpMode.Default) {
    return (
       {
          setSignUpMode(SignUpMode.SessionIDShown);
        }}
      />
    );
  }
  if (signUpMode === SignUpMode.SessionIDShown) {
    return (
       {
          setSignUpMode(SignUpMode.EnterDetails);
        }}
      />
    );
  }
  // can only be the EnterDetails step
  // Display name is required
  const displayNameOK = !displayNameError && !!displayName;
  // Password is valid if empty, or if no error and fields are matching
  const passwordsOK =
    !password || (!passwordErrorString && passwordFieldsMatch);
  const enableCompleteSignUp = displayNameOK && passwordsOK;
  const signUpWithDetails = async () => {
    await signUp({
      displayName,
      generatedRecoveryPhrase: props.generatedRecoveryPhrase,
      password,
      verifyPassword: passwordVerify,
    });
  };
  return (
    
      
        {window.i18n('welcomeToYourSession')}
      
       {
          const sanitizedName = name.replace(window.displayNameRegex, '');
          const trimName = sanitizedName.trim();
          setDisplayName(sanitizedName);
          setDisplayNameError(
            !trimName ? window.i18n('displayNameEmpty') : undefined
          );
        }}
        onPasswordChanged={(val: string) => {
          setPassword(val);
          if (!val) {
            setPasswordVerify('');
            setPasswordErrorString('');
            setPasswordFieldsMatch(true);
            return;
          }
          const errors = validatePassword(val, passwordVerify);
          setPasswordErrorString(errors.passwordErrorString);
          setPasswordFieldsMatch(errors.passwordFieldsMatch);
        }}
        onPasswordVerifyChanged={(val: string) => {
          setPasswordVerify(val);
          const errors = validatePassword(password, val);
          setPasswordErrorString(errors.passwordErrorString);
          setPasswordFieldsMatch(errors.passwordFieldsMatch);
        }}
        password={password}
        passwordErrorString={passwordErrorString}
        passwordFieldsMatch={passwordFieldsMatch}
        stealAutoFocus={true}
      />
      
      
     
  );
};