/* eslint-disable */
/* Auth state hook — mirrors shop-state.jsx pattern.
   Talks to /api/auth/* endpoints. Session is an httpOnly cookie set by the
   backend, so there's no token to manage on this side. */
(function () {
  const { useState: useState_a, useEffect: useEffect_a, useCallback: useCallback_a } = React;

  function useAuth() {
    const [user, setUser] = useState_a(null);
    const [loading, setLoading] = useState_a(true);
    const [authError, setAuthError] = useState_a(null);

    // Fetch current session on mount.
    useEffect_a(() => {
      let cancelled = false;
      fetch("/api/auth/me", { credentials: "same-origin" })
        .then((r) => r.json())
        .then((d) => { if (!cancelled) { setUser(d.user || null); setLoading(false); } })
        .catch(() => { if (!cancelled) { setUser(null); setLoading(false); } });
      return () => { cancelled = true; };
    }, []);

    const post = useCallback_a(async (path, body) => {
      const r = await fetch(path, {
        method: "POST",
        credentials: "same-origin",
        headers: { "Content-Type": "application/json" },
        body: body ? JSON.stringify(body) : undefined,
      });
      let data = {};
      try { data = await r.json(); } catch {}
      if (!r.ok) {
        const msg = data.message || data.error || `HTTP ${r.status}`;
        const err = new Error(msg);
        err.code = data.error;
        err.status = r.status;
        throw err;
      }
      return data;
    }, []);

    const signIn = useCallback_a(async (email, password) => {
      setAuthError(null);
      try {
        const d = await post("/api/auth/login", { email, password });
        setUser(d.user);
        return d.user;
      } catch (e) {
        setAuthError(e.message);
        throw e;
      }
    }, [post]);

    const signUp = useCallback_a(async (email, password, name) => {
      setAuthError(null);
      try {
        const d = await post("/api/auth/signup", { email, password, name });
        setUser(d.user);
        return d.user;
      } catch (e) {
        setAuthError(e.message);
        throw e;
      }
    }, [post]);

    const signOut = useCallback_a(async () => {
      try { await post("/api/auth/logout"); } catch {}
      setUser(null);
    }, [post]);

    const refreshUser = useCallback_a(async () => {
      try {
        const r = await fetch("/api/auth/me", { credentials: "same-origin" });
        const d = await r.json();
        setUser(d.user || null);
      } catch {}
    }, []);

    const fetchOrders = useCallback_a(async () => {
      const r = await fetch("/api/orders", { credentials: "same-origin" });
      if (!r.ok) throw new Error(`Failed to load orders (${r.status})`);
      const d = await r.json();
      return d.orders || [];
    }, []);

    return {
      user,
      loading,
      authError,
      isAuthed: !!user,
      isAdmin: !!user && user.role === "admin",
      signIn,
      signUp,
      signOut,
      refreshUser,
      fetchOrders,
    };
  }

  window.useAuth = useAuth;
})();
