/** * Tipos estritos para autenticação sem any */ export type AuthStatus = 'loading' | 'authenticated' | 'unauthenticated' export type UserType = 'profissional' | 'paciente' | 'administrador' export interface UserData { id: string email: string name: string userType: UserType profile?: { cpf?: string crm?: string // Para profissionais telefone?: string foto_url?: string } } export interface LoginRequest { email: string password: string } export interface LoginResponse { access_token: string refresh_token?: string token_type: string expires_in: number user: UserData } export interface RefreshTokenResponse { access_token: string token_type: string expires_in: number } export interface AuthError { message: string code: string details?: unknown } export interface AuthContextType { authStatus: AuthStatus user: UserData | null token: string | null login: (email: string, password: string, userType: UserType) => Promise logout: () => Promise refreshToken: () => Promise } export interface AuthStorageKeys { readonly TOKEN: string readonly REFRESH_TOKEN: string readonly USER: string readonly USER_TYPE: string } export type UserTypeRoutes = { readonly [K in UserType]: string } export type LoginRoutes = { readonly [K in UserType]: string } // Constantes para localStorage export const AUTH_STORAGE_KEYS: AuthStorageKeys = { TOKEN: 'auth_token', REFRESH_TOKEN: 'auth_refresh_token', USER: 'auth_user', USER_TYPE: 'auth_user_type', } as const // Rotas baseadas no tipo de usuário export const USER_TYPE_ROUTES: UserTypeRoutes = { profissional: '/profissional', paciente: '/paciente', administrador: '/dashboard', } as const export const LOGIN_ROUTES: LoginRoutes = { profissional: '/login', paciente: '/login', administrador: '/login', } as const