const { useState, useEffect } = React;

const AttendanceApp = ({ currentUser }) => {
  const [faculty, setFaculty] = useState(currentUser || null);
  const [session, setSession] = useState(null);          // active scanner session
  const [registerCtx, setRegisterCtx] = useState(null); // active register context

  // Sync faculty if currentUser changes (main app login)
  useEffect(() => {
    if (currentUser) setFaculty(currentUser);
  }, [currentUser]);

  // Fallback to local storage only if no currentUser
  useEffect(() => {
    if (!faculty) {
      const stored = localStorage.getItem('attendance_faculty');
      if (stored) setFaculty(JSON.parse(stored));
    }
  }, []);

  const handleLogin = (facultyData) => {
    localStorage.setItem('attendance_faculty', JSON.stringify(facultyData));
    setFaculty(facultyData);
  };

  const handleLogout = () => {
    localStorage.removeItem('attendance_faculty');
    setFaculty(null);
    setSession(null);
    setRegisterCtx(null);
  };

  // ── Navigation states ────────────────────────────────────────────────────────
  // 1. No faculty → Login
  if (!faculty) {
    return <window.TeacherLogin onLogin={handleLogin} />;
  }

  // 2. Active scanner session → ScannerView
  if (session) {
    return (
      <window.ScannerView
        session={session}
        onFinish={() => setSession(null)}
      />
    );
  }

  // 3. Active register context → AttendanceRegister
  if (registerCtx) {
    return (
      <window.AttendanceRegister
        registerContext={registerCtx}
        faculty={faculty}
        onBack={() => setRegisterCtx(null)}
      />
    );
  }

  // 4. Default → Teacher Dashboard
  return (
    <window.TeacherDashboard
      faculty={faculty}
      onLogout={handleLogout}
      onSessionCreated={(newSession) => setSession(newSession)}
      onViewRegister={(ctx) => setRegisterCtx(ctx)}
    />
  );
};

window.AttendanceApp = AttendanceApp;
