import React, { createContext, useState, useEffect, useContext, ReactNode } from 'react'; import { Session, User } from '@supabase/supabase-js'; import { supabase } from '../services/supabase'; interface AuthContextType { user: User | null; session: Session | null; loading: boolean; isSpotifyAuthenticated: boolean; enableSpotifyMode: () => void; } const AuthContext = createContext({ user: null, session: null, loading: true, isSpotifyAuthenticated: false, enableSpotifyMode: () => {}, }); export const useAuth = () => useContext(AuthContext); export const AuthProvider = ({ children }: { children: ReactNode }) => { const [user, setUser] = useState(null); const [session, setSession] = useState(null); const [loading, setLoading] = useState(true); const [isSpotifyAuthenticated, setIsSpotifyAuthenticated] = useState(false); const enableSpotifyMode = () => { setIsSpotifyAuthenticated(true); setLoading(false); }; useEffect(() => { supabase.auth.getSession().then(({ data: { session } }) => { setSession(session); setUser(session?.user ?? null); if (!session) { setIsSpotifyAuthenticated(false); } else { const isSpotify = !!session.user?.user_metadata?.spotify_id; setIsSpotifyAuthenticated(isSpotify); } setLoading(false); }); const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => { setSession(session); setUser(session?.user ?? null); if (!session) { setIsSpotifyAuthenticated(false); } else { const isSpotify = !!session.user?.user_metadata?.spotify_id; setIsSpotifyAuthenticated(isSpotify); } setLoading(false); }); return () => subscription.unsubscribe(); }, []); return ( {children} ); };