"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.useAuthStore = void 0;
var _zustand = require("zustand");
const useAuthStore = exports.useAuthStore = (0, _zustand.create)((set, get) => ({
  user: null,
  isAuthenticated: false,
  isLoading: false,
  error: null,
  lastUserFetch: null,
  loginSuccess: user => set({
    isLoading: false,
    isAuthenticated: true,
    user,
    lastUserFetch: Date.now()
  }),
  loginFailure: error => set({
    isLoading: false,
    error
  }),
  logout: () => set({
    user: null,
    isAuthenticated: false,
    lastUserFetch: null
  }),
  setUser: user => set({
    user,
    lastUserFetch: Date.now()
  }),
  fetchUser: async (oxyServices, forceRefresh = false) => {
    const state = get();
    const now = Date.now();
    const cacheAge = state.lastUserFetch ? now - state.lastUserFetch : Number.POSITIVE_INFINITY;
    const cacheValid = cacheAge < 5 * 60 * 1000; // 5 minutes cache

    // Use cached data if available and not forcing refresh
    if (!forceRefresh && state.user && cacheValid) {
      if (__DEV__) {
        console.log('AuthStore: Using cached user data (age:', cacheAge, 'ms)');
      }
      return;
    }
    set({
      isLoading: true,
      error: null
    });
    try {
      const user = await oxyServices.getCurrentUser();
      set({
        user,
        isLoading: false,
        isAuthenticated: true,
        lastUserFetch: now
      });
    } catch (error) {
      const errorMessage = error instanceof Error ? error.message : 'Failed to fetch user';
      if (__DEV__) {
        console.error('AuthStore: Error fetching user:', error);
      }
      set({
        error: errorMessage,
        isLoading: false
      });
    }
  },
  updateUser: async (updates, oxyServices) => {
    set({
      isLoading: true,
      error: null
    });
    try {
      await oxyServices.updateProfile(updates);
      // Immediately fetch the latest user data after update
      // Use arrow function to preserve 'this' context
      await useAuthStore.getState().fetchUser({
        getCurrentUser: () => oxyServices.getCurrentUser()
      }, true);
    } catch (error) {
      const errorMessage = error instanceof Error ? error.message : 'Failed to update user';
      if (__DEV__) {
        console.error('AuthStore: Error updating user:', error);
      }
      set({
        error: errorMessage,
        isLoading: false
      });
    }
  }
}));
//# sourceMappingURL=authStore.js.map