'use client';

import React, { useEffect, useState } from 'react';
import { usePathname, useRouter } from 'next/navigation';
import { apiRequest, getCurrentUser, setCurrentUser } from '../lib/api';
import { loginHref } from '../lib/authRedirect';

/**
 * Gate the customer site: must be logged in (local session or valid API cookie).
 * Login / register live outside (site) layout and stay public.
 */
export function RequireLogin({ children }: { children: React.ReactNode }) {
  const router = useRouter();
  const pathname = usePathname();
  const [ok, setOk] = useState(false);

  useEffect(() => {
    let cancelled = false;

    (async () => {
      if (getCurrentUser()) {
        if (!cancelled) setOk(true);
        return;
      }
      try {
        const me = await apiRequest('/auth/me');
        if (cancelled) return;
        setCurrentUser(me.data);
        setOk(true);
      } catch {
        if (!cancelled) router.replace(loginHref(pathname || '/'));
      }
    })();

    return () => {
      cancelled = true;
    };
  }, [router, pathname]);

  if (!ok) {
    return (
      <div
        className="flex min-h-[100dvh] items-center justify-center bg-d11-bg text-sm text-d11-muted"
        role="status"
        aria-live="polite"
      >
        Checking session…
      </div>
    );
  }

  return <>{children}</>;
}
