// Supabase client + auth context.

const SUPABASE_URL = 'https://eyzgavkvvuybcpnwbfyu.supabase.co';
const SUPABASE_KEY = 'sb_publishable_jlkTHgh_y9FuADr54XIUJg_NJm7vEWG';

const supabaseClient = window.supabase.createClient(SUPABASE_URL, SUPABASE_KEY);

const AuthContext = React.createContext(null);
const useAuth = () => React.useContext(AuthContext);

const AuthProvider = ({ children }) => {
  const [session, setSession] = React.useState(undefined); // undefined = still loading

  React.useEffect(() => {
    supabaseClient.auth.getSession().then(({ data: { session } }) => setSession(session));
    const { data: { subscription } } = supabaseClient.auth.onAuthStateChange((_event, session) => {
      setSession(session);
    });
    return () => subscription.unsubscribe();
  }, []);

  const signInWithGoogle = () =>
    supabaseClient.auth.signInWithOAuth({
      provider: 'google',
      options: { redirectTo: window.location.origin },
    });

  const signInWithEmail = (email, password) =>
    supabaseClient.auth.signInWithPassword({ email, password });

  const signUpWithEmail = (email, password) =>
    supabaseClient.auth.signUp({
      email,
      password,
      options: { emailRedirectTo: window.location.origin },
    });

  const signOut = () => supabaseClient.auth.signOut();

  return (
    <AuthContext.Provider value={{
      session,
      user: session?.user ?? null,
      authLoading: session === undefined,
      signInWithGoogle,
      signInWithEmail,
      signUpWithEmail,
      signOut,
    }}>
      {children}
    </AuthContext.Provider>
  );
};

window._supabase = supabaseClient;
Object.assign(window, { supabaseClient, AuthContext, useAuth, AuthProvider });
