{"version":3,"sources":["../src/store/authStore.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\nimport { KEYS } from '@/utils/keys';\n\n/**\n * Interface representing user authentication tokens.\n */\nexport interface AuthTokens {\n  token: string;\n  refreshToken: string;\n  [key: string]: unknown;\n}\n\n/**\n * Interface representing a user profile.\n */\nexport interface UserProfile {\n  id: string;\n  name?: string;\n  email?: string;\n  [key: string]: unknown;\n}\n\n/**\n * Interface representing a user.\n */\nexport interface User {\n  id: string;\n  name?: string;\n  email?: string;\n  [key: string]: unknown;\n}\n\n/**\n * Interface representing session information from the API.\n */\nexport interface SessionInfo {\n  sessionId: string;\n  userId: string;\n  profileId: string;\n  institutionId: string;\n  institutionTheme?: string | null;\n  institutionFavicon?: string | null;\n  institutionIcon?: string | null;\n  institutionMainLogo?: string | null;\n  institutionInternalLogo?: string | null;\n  institutionLoginImage?: string | null;\n  schoolId: string;\n  schoolYearId: string;\n  classId: string;\n  subjects: string[];\n  schools: string[];\n  userName?: string;\n  urlProfilePicture?: string;\n  [key: string]: unknown;\n}\n\n/**\n * Interface defining the authentication state.\n */\nexport interface AuthState {\n  user: User | null;\n  tokens: AuthTokens | null;\n  isAuthenticated: boolean;\n  profiles: UserProfile[];\n  selectedProfile: UserProfile | null;\n  sessionInfo: SessionInfo | null;\n\n  setUser: (user: User | null) => void;\n  setTokens: (tokens: AuthTokens | null) => void;\n  setProfiles: (profiles: UserProfile[]) => void;\n  setSelectedProfile: (profile: UserProfile | null) => void;\n  setSessionInfo: (sessionInfo: SessionInfo | null) => void;\n  signIn: (user: User, tokens: AuthTokens, profiles: UserProfile[]) => void;\n  signOut: () => void;\n  updateUserSession: (sessionData: Partial<User>) => void;\n}\n\n/**\n * Zustand store for managing authentication state with persistence.\n */\nexport const useAuthStore = create<AuthState>()(\n  persist(\n    (set, get) => ({\n      user: null,\n      tokens: null,\n      isAuthenticated: false,\n      profiles: [],\n      selectedProfile: null,\n      sessionInfo: null,\n\n      /**\n       * Set the current user\n       * @param {User | null} user - The user object or null to clear\n       * @returns {void}\n       */\n      setUser: (user: User | null): void => {\n        set({ user, isAuthenticated: !!user });\n      },\n\n      /**\n       * Set the authentication tokens\n       * @param {AuthTokens | null} tokens - The authentication tokens or null to clear\n       * @returns {void}\n       */\n      setTokens: (tokens: AuthTokens | null): void => {\n        set({ tokens });\n      },\n\n      /**\n       * Set user profiles\n       * @param {UserProfile[]} profiles - Array of user profiles\n       * @returns {void}\n       */\n      setProfiles: (profiles: UserProfile[]): void => {\n        set({ profiles });\n      },\n\n      /**\n       * Set the selected profile\n       * @param {UserProfile | null} profile - The selected profile or null to clear\n       * @returns {void}\n       */\n      setSelectedProfile: (profile: UserProfile | null): void => {\n        set({ selectedProfile: profile });\n      },\n\n      /**\n       * Set the session info\n       * @param {SessionInfo | null} sessionInfo - The session info or null to clear\n       * @returns {void}\n       */\n      setSessionInfo: (sessionInfo: SessionInfo | null): void => {\n        set({ sessionInfo });\n      },\n\n      /**\n       * Sign in user with complete auth data\n       * @param {User} user - The user object\n       * @param {AuthTokens} tokens - The authentication tokens\n       * @param {UserProfile[]} profiles - Array of user profiles\n       * @returns {void}\n       */\n      signIn: (\n        user: User,\n        tokens: AuthTokens,\n        profiles: UserProfile[]\n      ): void => {\n        set({\n          user,\n          tokens,\n          profiles,\n          isAuthenticated: true,\n        });\n      },\n\n      /**\n       * Sign out user and clear all auth data\n       * @returns {void}\n       */\n      signOut: (): void => {\n        set({\n          user: null,\n          tokens: null,\n          isAuthenticated: false,\n          profiles: [],\n          selectedProfile: null,\n          sessionInfo: null,\n        });\n      },\n\n      /**\n       * Update user session data (after login completion)\n       * @param {Partial<User>} sessionData - Partial user data to update\n       * @returns {void}\n       */\n      updateUserSession: (sessionData: Partial<User>): void => {\n        const { user } = get();\n        if (user) {\n          const updatedUser = { ...user, ...sessionData };\n          set({ user: updatedUser });\n        }\n      },\n    }),\n    {\n      name: KEYS.AUTH_STORAGE,\n      storage: createJSONStorage(() => localStorage),\n    }\n  )\n);\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,mBAAmB,eAAe;AAgFpC,IAAM,eAAe,OAAkB;AAAA,EAC5C;AAAA,IACE,CAAC,KAAK,SAAS;AAAA,MACb,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,UAAU,CAAC;AAAA,MACX,iBAAiB;AAAA,MACjB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOb,SAAS,CAAC,SAA4B;AACpC,YAAI,EAAE,MAAM,iBAAiB,CAAC,CAAC,KAAK,CAAC;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,WAAW,CAAC,WAAoC;AAC9C,YAAI,EAAE,OAAO,CAAC;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,aAAa,CAAC,aAAkC;AAC9C,YAAI,EAAE,SAAS,CAAC;AAAA,MAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,oBAAoB,CAAC,YAAsC;AACzD,YAAI,EAAE,iBAAiB,QAAQ,CAAC;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,gBAAgB,CAAC,gBAA0C;AACzD,YAAI,EAAE,YAAY,CAAC;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,QAAQ,CACN,MACA,QACA,aACS;AACT,YAAI;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,QACnB,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,SAAS,MAAY;AACnB,YAAI;AAAA,UACF,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,UAAU,CAAC;AAAA,UACX,iBAAiB;AAAA,UACjB,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,mBAAmB,CAAC,gBAAqC;AACvD,cAAM,EAAE,KAAK,IAAI,IAAI;AACrB,YAAI,MAAM;AACR,gBAAM,cAAc,EAAE,GAAG,MAAM,GAAG,YAAY;AAC9C,cAAI,EAAE,MAAM,YAAY,CAAC;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA,SAAS,kBAAkB,MAAM,YAAY;AAAA,IAC/C;AAAA,EACF;AACF;","names":[]}