import { createElement, type ReactNode } from 'react'
import {
  AuthProvider,
  RequireRole,
  type AuthClient,
  type Principal,
  type SignInCredentials,
  type SignUpInput,
} from '@platform-modules/auth-react'

export function composeClientAuth(client: AuthClient, children: ReactNode) {
  return createElement(
    AuthProvider,
    {
      client,
      children: createElement(RequireRole, {
        role: 'user',
        hierarchy: ['user', 'admin'],
        fallback: null,
        children,
      }),
    },
  )
}

export type PublicClientContract = {
  principal: Principal
  signIn: SignInCredentials
  signUp: SignUpInput
}
