2025-07-07 03:47:12 +09:00

67 lines
2.1 KiB
TypeScript

import { useEffect, useState } from 'react'
import { useRouter } from 'next/navigation'
import { UserProfile, setUserInfo, findOrCreateUser } from './api'
import { auth as firebaseAuth } from './firebase'
import { onAuthStateChanged, User as FirebaseUser } from 'firebase/auth'
const defaultLocalUser: UserProfile = {
uid: 'default_user',
display_name: 'Default User',
email: 'contact@pickle.com',
};
export const useAuth = () => {
const [user, setUser] = useState<UserProfile | null>(null)
const [isLoading, setIsLoading] = useState(true)
const [mode, setMode] = useState<'local' | 'firebase' | null>(null)
useEffect(() => {
const unsubscribe = onAuthStateChanged(firebaseAuth, async (firebaseUser: FirebaseUser | null) => {
if (firebaseUser) {
console.log('🔥 Firebase mode activated:', firebaseUser.uid);
setMode('firebase');
let profile: UserProfile = {
uid: firebaseUser.uid,
display_name: firebaseUser.displayName || 'User',
email: firebaseUser.email || 'no-email@example.com',
};
try {
profile = await findOrCreateUser(profile);
console.log('✅ Firestore user created/verified:', profile);
} catch (error) {
console.error('❌ Firestore user creation/verification failed:', error);
}
setUser(profile);
setUserInfo(profile);
} else {
console.log('🏠 Local mode activated');
setMode('local');
setUser(defaultLocalUser);
setUserInfo(defaultLocalUser);
}
setIsLoading(false);
});
return () => unsubscribe();
}, [])
return { user, isLoading, mode }
}
export const useRedirectIfNotAuth = () => {
const { user, isLoading } = useAuth()
const router = useRouter()
useEffect(() => {
// This hook is now simplified. It doesn't redirect for local mode.
// If you want to force login for hosting mode, you'd add logic here.
// For example: if (!isLoading && !user) router.push('/login');
// But for now, we allow both modes.
}, [user, isLoading, router])
return user
}