/* AuthContext + AuthProvider + useAuth → window. Usa window.auth (de firebase.js). */
(function () {
  const { useState, useEffect, createContext, useContext } = React;

  const AuthContext = createContext(null);

  function AuthProvider({ children }) {
    const [user, setUser] = useState(null);
    const [ready, setReady] = useState(false);

    useEffect(() => {
      // Procesa el resultado del redirect si venimos de signInWithRedirect (móvil)
      window.auth.getRedirectResult().catch(() => {});

      const unsub = window.auth.onAuthStateChanged(u => {
        setUser(u || null);
        setReady(true);
      });
      return unsub;
    }, []);

    const signInGoogle = async () => {
      const provider = new firebase.auth.GoogleAuthProvider();
      try {
        await window.auth.signInWithPopup(provider);
      } catch (e) {
        // En móvil algunos navegadores bloquean el popup → fallback a redirect
        if (
          e.code === "auth/popup-blocked" ||
          e.code === "auth/popup-closed-by-user" ||
          e.code === "auth/cancelled-popup-request" ||
          e.code === "auth/operation-not-supported-in-this-environment"
        ) {
          await window.auth.signInWithRedirect(provider);
        } else {
          throw e;
        }
      }
    };

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

    return <AuthContext.Provider value={{ user, ready, signInGoogle, signOut }}>{children}</AuthContext.Provider>;
  }
  const useAuth = () => useContext(AuthContext);

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