"use client"; import { useCallback, useMemo, useState } from "react"; import { useSession } from "../session/useSession"; import { getClientTimezone } from "@/shared/utils/locales"; import { ICreateAuthorizeRequest } from "@/entities/user/types"; import { filterNullKeysOfObject } from "@/shared/utils/filter-object"; import { createAuthorization } from "@/entities/user/actions"; import { setAuthTokenToCookie } from "@/entities/user/serverActions"; // TODO const locale = "en"; interface IUseAuthProps { funnelId: string; } export const useAuth = ({ funnelId }: IUseAuthProps) => { const { updateSession } = useSession({ funnelId }); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const getAllCookies = useCallback(() => { const cookies: Record = {}; document.cookie.split(";").forEach((cookie) => { const [name, value] = cookie.trim().split("="); if (name && value) { cookies[name] = decodeURIComponent(value); } }); return cookies; }, []); const getAuthorizationPayload = useCallback( (email: string): ICreateAuthorizeRequest => { const timezone = getClientTimezone(); return filterNullKeysOfObject({ timezone, locale, email, // source: funnelId, source: "aura.compatibility.v2", // profile: { // name: username || "", // gender: EGender[gender as keyof typeof EGender] || null, // birthdate: formatDate(`${birthdate} ${birthtime}`), // birthplace: { // address: birthPlace, // }, // }, // partner: { // name: partnerName, // gender: EGender[partnerGender as keyof typeof EGender] || null, // birthdate: formatDate(partnerBirthdate), // birthplace: { // address: partnerBirthPlace, // }, // }, sign: true, signDate: new Date().toISOString(), // feature: feature.includes("black") ? "ios" : feature, }); }, [ // birthPlace, // birthdate, // gender, // locale, // partnerBirthPlace, // partnerBirthdate, // partnerGender, // partnerName, // username, // birthtime, // checked, // dateOfCheck, ] ); const authorization = useCallback( async (email: string) => { try { setIsLoading(true); setError(null); // Обновляем сессию с куки перед авторизацией try { const cookies = getAllCookies(); await updateSession({ cookies }); console.log( "Session updated with cookies before authorization:", cookies ); } catch (sessionError) { console.warn("Failed to update session with cookies:", sessionError); // Продолжаем авторизацию даже если обновление сессии не удалось } const payload = getAuthorizationPayload(email); const { token, // userId: userIdFromApi, // generatingVideo, // videoId, // authCode, } = await createAuthorization(payload); await setAuthTokenToCookie(token); // const { user: userMe } = await api.getMe({ token }); // const userId = userIdFromApi || userMe?._id; // if (userId?.length) { // dispatch(actions.userId.update({ userId })); // metricService.userParams({ // hasPersonalVideo: generatingVideo || false, // email: user?.email, // UserID: userId, // }); // metricService.setUserID(userId); // } // signUp(token, userMe, isAnonymous); // setToken(token); // dispatch(actions.userConfig.setAuthCode(authCode || "")); // dispatch( // actions.personalVideo.updateStatus({ // generatingVideo: generatingVideo || false, // videoId: videoId || "", // }) // ); // if (generatingVideo) { // metricService.reachGoal(EGoals.ROSE_VIDEO_CREATION_START, [ // EMetrics.YANDEX, // EMetrics.KLAVIYO, // ]); // } // dispatch(actions.status.update("registred")); } catch (error) { setError((error as Error).message); } finally { setIsLoading(false); } }, [getAllCookies, getAuthorizationPayload, updateSession] ); return useMemo( () => ({ authorization, isLoading, error, }), [authorization, isLoading, error] ); };