import {useState} from "react"; import {useMutation} from "react-query"; import auth from "@react-native-firebase/auth"; import firestore from "@react-native-firebase/firestore"; import {User,} from "./types/profileTypes"; import {useSignUp} from "@/hooks/firebase/useSignUp"; type ProfileType = "parent" | "child" | "caregiver" | null; const useAuth = () => { const createUserMutation = useMutation(() => auth().createUserWithEmailAndPassword(email, password) ); const signInMutation = useMutation(() => auth().signInWithEmailAndPassword(email, password) ); const loginMutation = useMutation(() => auth().signInWithEmailAndPassword(email, password) ); const signOutMutation = useMutation(() => auth().signOut()); const {mutateAsync: signUp } = useSignUp() /*const setProfileDataMutation = useMutation((profileData) => { const currentUser = auth().currentUser; if (currentUser) { return firestore() .collection("Profiles") .doc(currentUser.uid) .set(profileData); } });*/ const [user, setUser] = useState(null); const [profileType, setProfileType] = useState(null); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const handleRegister = async () => { try { await signUp({email, password}) // await createUserMutation.mutateAsync(); console.log("User registered!"); // await signInMutation.mutateAsync(); // console.log("User signed in!"); /*let profileData: ParentProfile | ChildProfile | CaregiverProfile; switch (profileType) { case "parent": profileData = { userType: "parent", name: "", childrenIds: [], } as ParentProfile; break; case "child": profileData = { userType: "child", name: "", birthday: new Date(), parentId: "X", } as ChildProfile; break; case "caregiver": profileData = { userType: "caregiver", name: "Nanny Nannersen", contact: "5523123", } as CaregiverProfile; break; default: throw new Error("Invalid profile type"); } const currentUser = auth().currentUser; if (currentUser) { await firestore() .collection("Profiles") .doc(currentUser.uid) .set(profileData); console.log("Profile document added!"); }*/ } catch (error) { console.error("Error during registration: ", error); } }; const handleLogin = async () => { try { await loginMutation.mutateAsync(); console.log("User signed in!"); } catch (error) { console.error("Error during sign in:", error); } }; const handleSignOut = async () => { try { await signOutMutation.mutateAsync(); console.log("User signed out!"); } catch (error) { console.error("Error during sign out:", error); } }; const handleProfileTypeSelection = async (type: ProfileType) => { if (user) { setProfileType(type); try { await firestore() .collection("Profiles") .doc(user.uid) .set({profileType: type}, {merge: true}); } catch (error) { console.error("Error saving profile type:", error); } } }; return { user, profileType, email, setEmail, password, setPassword, handleLogin, handleSignOut, handleProfileTypeSelection, handleRegister, }; }; export default useAuth;