import {create} from "zustand"; import {createJSONStorage, persist} from "zustand/middleware"; import AsyncStorage from "@react-native-async-storage/async-storage"; import axios from "axios"; const API_URL = "https://hopp.zikor.pl/api/v1"; export const useAuthStore = create( persist( (set) => ({ user_id: null, token: null, isLoading: false, error: null, signIn: async (email, password) => { set({isLoading: true, error: null}); try { const response = await axios.post(`${API_URL}/auth/login`, { email, password }); const user_id = response.data.user_id; const token = response.data.token; set({user_id: user_id, token: token, isLoading: false}); axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; } catch (error) { set({error: error.response?.data?.message || error.message, isLoading: false}); throw error; } }, signUp: async (userData) => { set({isLoading: true, error: null}); try { const response = await axios.post(`${API_URL}/auth/register`, userData, { headers: {'Content-Type': 'application/json'} }); const user_id = response.data.user_id; const token = response.data.token; set({user_id: user_id, token: token, isLoading: false}); axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; } catch (error) { set({error: error.response?.data?.message || error.message, isLoading: false}); throw error; } }, signInWithGoogle: async (googleToken) => { set({isLoading: true, error: null}); try { const response = await axios.post(`${API_URL}/auth/google`, {googleToken: googleToken}, { headers: {'Content-Type': 'application/json'} }); const user_id = response.data.user_id; const token = response.data.token; set({user_id: user_id, token: token, isLoading: false}); axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; } catch (error) { set({error: error.response?.data?.message || error.message, isLoading: false}); throw error; } }, signOut: async () => { try { await axios.post(`${API_URL}/auth/logout`); } catch (error) { console.error("Logout error:", error); } finally { delete axios.defaults.headers.common["Authorization"]; set({user_id: null, token: null}); } }, checkAuth: async () => { const {token} = useAuthStore.getState(); if (!token) return null; set({isLoading: true}); try { axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; const response = await axios.get(`${API_URL}/auth/me`); set({user_id: response.data, isLoading: false}); return response.data; } catch (error) { delete axios.defaults.headers.common["Authorization"]; set({user_id: null, token: null, isLoading: false}); return null; } }, }), { name: "auth-storage", storage: createJSONStorage(() => AsyncStorage), } ) );