import { create } from "zustand"; import Cookies from "@react-native-cookies/cookies"; import { api } from "@/services/api"; import { useSettingsStore } from "./settingsStore"; interface AuthState { isLoggedIn: boolean; isLoginModalVisible: boolean; showLoginModal: () => void; hideLoginModal: () => void; checkLoginStatus: (apiBaseUrl?: string) => Promise; logout: () => Promise; } const useAuthStore = create((set) => ({ isLoggedIn: false, isLoginModalVisible: false, showLoginModal: () => set({ isLoginModalVisible: true }), hideLoginModal: () => set({ isLoginModalVisible: false }), checkLoginStatus: async (apiBaseUrl?: string) => { if (!apiBaseUrl) { set({ isLoggedIn: false, isLoginModalVisible: false }); return; } try { const serverConfig = useSettingsStore.getState().serverConfig; const cookies = await Cookies.get(api.baseURL); if (serverConfig && serverConfig.StorageType === "localstorage" && !cookies.auth) { const loginResult = await api.login().catch(() => { set({ isLoggedIn: false, isLoginModalVisible: true }); }); if (loginResult && loginResult.ok) { set({ isLoggedIn: true }); } } else { const isLoggedIn = cookies && !!cookies.auth; set({ isLoggedIn }); if (!isLoggedIn) { set({ isLoginModalVisible: true }); } } } catch (error) { console.info("Failed to check login status:", error); if (error instanceof Error && error.message === "UNAUTHORIZED") { set({ isLoggedIn: false, isLoginModalVisible: true }); } else { set({ isLoggedIn: false }); } } }, logout: async () => { try { await Cookies.clearAll(); set({ isLoggedIn: false, isLoginModalVisible: true }); } catch (error) { console.info("Failed to logout:", error); } }, })); export default useAuthStore;