// TypeScript definitions for React integration

import { ReactElement } from 'react';
import { FaSSDKConfig, FaSUser, FaSAuthResult, BrowserSupport } from './index';

export interface UseFaSAuthResult {
  user: FaSUser | null;
  loading: boolean;
  error: string | null;
  register: (email: string, fullname?: string) => Promise<FaSAuthResult>;
  login: (email: string) => Promise<FaSAuthResult>;
  passwordlessLogin: () => Promise<FaSAuthResult>;
  logout: () => void;
  isAuthenticated: boolean;
  isWebAuthnSupported: boolean;
}

export function useFaSAuth(config: FaSSDKConfig): UseFaSAuthResult;
export function useWebAuthnSupport(): BrowserSupport;

export interface FaSRegisterProps {
  clientId: string;
  clientSecret?: string;
  apiBase?: string;
  useProxy?: boolean;     // Enable proxy mode
  onSuccess?: (result: FaSAuthResult) => void;
  onError?: (error: Error) => void;
  buttonText?: string;
  className?: string;
  disabled?: boolean;
}

export interface FaSLoginProps {
  clientId: string;
  clientSecret?: string;
  apiBase?: string;
  useProxy?: boolean;     // Enable proxy mode
  onSuccess?: (result: FaSAuthResult) => void;
  onError?: (error: Error) => void;
  buttonText?: string;
  passwordlessButtonText?: string;
  showPasswordless?: boolean;
  className?: string;
  disabled?: boolean;
}

export interface FaSWebAuthnSupportProps {
  supportedText?: string;
  unsupportedText?: string;
  loadingText?: string;
  showDetails?: boolean;
  className?: string;
}

export function FaSRegister(props: FaSRegisterProps): ReactElement;
export function FaSLogin(props: FaSLoginProps): ReactElement;
export function FaSWebAuthnSupport(props: FaSWebAuthnSupportProps): ReactElement;

export function withFaSAuth<P extends object>(
  WrappedComponent: React.ComponentType<P & { auth: UseFaSAuthResult }>,
  config: FaSSDKConfig
): React.ComponentType<P>; 