"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,
  // Identity sync state (offline-first)
  isIdentitySynced: true,
  // Assume synced until proven otherwise
  isSyncing: false,
  loginSuccess: user => set({
    isLoading: false,
    isAuthenticated: true,
    user,
    lastUserFetch: Date.now(),
    isIdentitySynced: true // If login succeeded, identity is synced
  }),
  loginFailure: error => set({
    isLoading: false,
    error
  }),
  logout: () => set({
    user: null,
    isAuthenticated: false,
    lastUserFetch: null,
    // Reset identity sync state when logging out (for accounts app, identity = account)
    isIdentitySynced: false,
    isSyncing: false
  }),
  setUser: user => set({
    user,
    lastUserFetch: Date.now()
  }),
  // Identity sync actions
  setIdentitySynced: synced => set({
    isIdentitySynced: synced
  }),
  setSyncing: syncing => set({
    isSyncing: syncing
  }),
  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
      });
    }
  }
}));
//# sourceMappingURL=authStore.js.map