import { type ReactNode } from 'react';
import { type RegisterOptions } from 'react-hook-form';

export type FormFieldConfig = {
  rules: RegisterOptions;
};

export type LoginFormConfig = {
  email: FormFieldConfig;
  password: FormFieldConfig;
};

export type SSOConfig = {
  azureButton: React.ReactNode;
  googleButton: React.ReactNode;
  oktaButton: React.ReactNode;
};

export type LoginCallbacks = {
  onSubmit: (e: React.FormEvent<HTMLFormElement>) => void;
  onRecoverPassword: () => void;
  onSelectAnother: () => void;
};

export type LoginFormProps = {
  title: ReactNode;
  hasInstanceSelected: boolean;
  showAnotherInstanceButton: boolean;
  formConfig: LoginFormConfig;
  callbacks: LoginCallbacks;
  isSubmitting: boolean;
  submitDisabled?: boolean;
  sso: SSOConfig;
  termsOfUseAndPrivacy?: ReactNode;
};
