import { useMemo } from 'react'

import { CentralAcceptInvitationReq } from 'dbaas/services'
import { ConnectionType } from 'dbaas/services/auth'
import { useGAPageView } from 'dbaas/utils/tracking/usePageViewTracking'
import useSessionStorage from 'dbaas/utils/useSessionStorage'

import EnterpiseSignIn from '../../SignIn/enterprise'
import { getEmail } from '../../utils'

export type InviteUserInfo = CentralAcceptInvitationReq & { invite_link: string; connection: string; search: string }

export const EnterpiseInvite = () => {
  const search = window.location.search
  const urlParams = useMemo(() => new URLSearchParams(search), [search])
  const email = getEmail(urlParams.get('email') || '') // invited user email
  const orgId = urlParams.get('org_id') || '' //invite user from a exist tenant

  const [, setInviteUser] = useSessionStorage<InviteUserInfo>('invite_user')

  const beforeAction = (connection: string, extra?: Pick<InviteUserInfo, 'first_name' | 'last_name'>) => {
    setInviteUser({
      first_name: '',
      last_name: '',
      email,
      org_id: orgId,
      invite_link: window.location.pathname + search,
      search,
      connection: ConnectionType[connection] || connection,
      ...extra
    })
  }
  useGAPageView()

  return <EnterpiseSignIn type="invite" beforeAction={beforeAction} />
}

export default EnterpiseInvite
