import { signIn, useSession, getSession } from 'next-auth/react'; import { useRouter } from 'next/router'; import { useState, useEffect } from 'react'; import { useNDKContext } from '@/context/NDKContext'; import GenericButton from '@/components/buttons/GenericButton'; import Image from 'next/image'; import { InputText } from 'primereact/inputtext'; export default function SignIn() { const [email, setEmail] = useState(''); const [nsec, setNsec] = useState(''); const [showEmailInput, setShowEmailInput] = useState(false); const [showRecoveryInput, setShowRecoveryInput] = useState(false); const { ndk, addSigner } = useNDKContext(); const { data: session, status } = useSession(); const router = useRouter(); const handleEmailSignIn = async e => { e.preventDefault(); await signIn('email', { email, callbackUrl: '/profile' }); }; const handleNostrSignIn = async e => { e.preventDefault(); if (!ndk.signer) { await addSigner(); } try { const user = await ndk.signer.user(); const pubkey = user?._pubkey; signIn('nostr', { pubkey, callbackUrl: '/profile' }); } catch (error) { console.error('Error signing Nostr event:', error); } }; const handleAnonymousSignIn = async e => { e.preventDefault(); // Check if we have keys in local storage const storedPubkey = localStorage.getItem('anonymousPubkey'); const storedPrivkey = localStorage.getItem('anonymousPrivkey'); try { const result = await signIn('anonymous', { pubkey: storedPubkey, privkey: storedPrivkey, redirect: false, callbackUrl: '/profile', }); if (result?.ok) { // Wait a moment for the session to be updated await new Promise(resolve => setTimeout(resolve, 1000)); // Fetch the session const session = await getSession(); if (session?.user?.pubkey && session?.user?.privkey) { localStorage.setItem('anonymousPubkey', session.user.pubkey); localStorage.setItem('anonymousPrivkey', session.user.privkey); router.push('/profile'); } else { console.error('Session data incomplete:', session); } } else { console.error('Anonymous login failed:', result?.error); } } catch (error) { console.error('Sign in error:', error); } }; const handleRecoverySignIn = async e => { e.preventDefault(); try { const result = await signIn('recovery', { nsec, redirect: false, callbackUrl: '/profile', }); if (result?.ok) { router.push('/profile'); } else { console.error('Recovery login failed:', result?.error); } } catch (error) { console.error('Recovery sign in error:', error); } }; useEffect(() => { // Redirect if already signed in if (session?.user) { router.push('/profile'); } }, [session, router]); return (