/* Firebase Auth wrapper
 *
 * window.Auth = {
 *   useUser()  → { status: "loading"|"noconfig"|"in"|"out", user, error? }
 *   signInGoogle() → Promise
 *   signOut()  → Promise
 * }
 *
 * 用 Firebase compat SDK（v10）— 配 CDN + Babel 最簡單，不用 build。
 */

let initialized = false;
let initErr = null;

function ensureInit() {
  if (initialized) return true;
  if (!window.firebase) { initErr = "Firebase SDK 未載入"; return false; }
  if (!window.FIREBASE_CONFIG) { initErr = "缺少 FIREBASE_CONFIG"; return false; }
  if (window.FIREBASE_CONFIG.apiKey === "TODO_APIKEY") {
    initErr = "Firebase config 未填寫（firebase-config.js）";
    return false;
  }
  try {
    window.firebase.initializeApp(window.FIREBASE_CONFIG);
    initialized = true;
    return true;
  } catch (e) {
    initErr = e.message || "Firebase initializeApp 失敗";
    return false;
  }
}

async function signInGoogle() {
  if (!ensureInit()) throw new Error(initErr);
  const provider = new window.firebase.auth.GoogleAuthProvider();
  return window.firebase.auth().signInWithPopup(provider);
}

async function signOutUser() {
  if (!ensureInit()) return;
  return window.firebase.auth().signOut();
}

function useUser() {
  const [state, setState] = React.useState({ status: "loading", user: null });

  React.useEffect(() => {
    if (!ensureInit()) {
      setState({ status: "noconfig", user: null, error: initErr });
      return;
    }
    const unsub = window.firebase.auth().onAuthStateChanged((user) => {
      setState({ status: user ? "in" : "out", user });
    });
    return unsub;
  }, []);

  return state;
}

window.Auth = { useUser, signInGoogle, signOut: signOutUser };
