/* global React, RecruitNav, RecruitHero, RecruitTrail, RecruitWho, RecruitOutcomes, RecruitProof, RecruitBios, RecruitTestimonials, RecruitFAQ, RecruitFinalCTA, RecruitFooter */

// Seat-persistence helpers. The count survives reloads and decays while away,
// so a returning visitor sees an "active enrollment" instead of the page reset to 8.
const BC_SEATS_KEY = 'bc-recruit-seats-v1';
const BC_SEATS_FLOOR = 3;
const BC_SEATS_AVG_MS = 135000; // 2:15 avg between drops — matches in-session cadence

function bcReadSeats(fallback) {
  try {
    const raw = localStorage.getItem(BC_SEATS_KEY);
    if (!raw) return fallback;
    const { count, lastUpdate } = JSON.parse(raw);
    if (typeof count !== 'number' || typeof lastUpdate !== 'number') return fallback;
    const drops = Math.floor(Math.max(0, Date.now() - lastUpdate) / BC_SEATS_AVG_MS);
    return Math.max(BC_SEATS_FLOOR, Math.min(count, count - drops));
  } catch { return fallback; }
}
function bcWriteSeats(count) {
  try { localStorage.setItem(BC_SEATS_KEY, JSON.stringify({ count, lastUpdate: Date.now() })); } catch {}
}

// Single recruit page, parameterized by variant ('tame' | 'bold'), seats, headline.
function RecruitPage({ variant = 'tame', seats = 8, headline = '', imgBase = 'assets' }) {
  const [currentSeats, setCurrentSeats] = React.useState(() => bcReadSeats(seats));
  const initialSeatsRef = React.useRef(seats);

  // Persist the opening count on first mount so future loads can measure elapsed time.
  React.useEffect(() => { bcWriteSeats(currentSeats); /* eslint-disable-next-line */ }, []);

  // If the parent (e.g. tweaks panel) explicitly changes seats post-mount, honor it and reset storage.
  React.useEffect(() => {
    if (seats !== initialSeatsRef.current) {
      initialSeatsRef.current = seats;
      setCurrentSeats(seats);
      bcWriteSeats(seats);
    }
  }, [seats]);

  // Live decrement — every 90–180s drop a seat, floor at 3. Never goes up; never hits 0. Persisted.
  React.useEffect(() => {
    let timer;
    const schedule = () => {
      const delay = 90000 + Math.random() * 90000;
      timer = setTimeout(() => {
        setCurrentSeats(prev => {
          const next = prev > BC_SEATS_FLOOR ? prev - 1 : prev;
          bcWriteSeats(next);
          return next;
        });
        schedule();
      }, delay);
    };
    schedule();
    return () => clearTimeout(timer);
  }, []);

  return (
    <div style={{
      background: '#FAF6E8',
      color: '#212529',
      fontFamily: '"Lato", system-ui, -apple-system, Arial, sans-serif',
    }}>
      <RecruitNav     variant={variant} seats={currentSeats}/>
      <RecruitHero    variant={variant} seats={currentSeats} headline={headline} imgBase={imgBase}/>
      <RecruitTrail   variant={variant} imgBase={imgBase}/>
      <RecruitWho     variant={variant}/>
      <RecruitOutcomes variant={variant}/>
      <RecruitProof   variant={variant}/>
      <RecruitBios    variant={variant}/>
      <RecruitTestimonials variant={variant}/>
      <RecruitFAQ     variant={variant}/>
      <RecruitFinalCTA variant={variant} seats={currentSeats}/>
      <RecruitFooter/>
    </div>
  );
}

window.RecruitPage = RecruitPage;
