/* global React */
const { useState, useEffect, useRef } = React;

// ============================================================================
// Shared bits
// ============================================================================

function StarOfDavid({ size = 14, color = "currentColor" }) {
  return (
    <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth="1.2">
      <polygon points="12,2 22,19 2,19" />
      <polygon points="12,22 2,5 22,5" />
    </svg>
  );
}

function GoogleIcon({ size = 18 }) {
  return (
    <svg width={size} height={size} viewBox="0 0 18 18">
      <path d="M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.874 2.684-6.615z" fill="#4285F4"/>
      <path d="M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18z" fill="#34A853"/>
      <path d="M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.996 8.996 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332z" fill="#FBBC05"/>
      <path d="M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58z" fill="#EA4335"/>
    </svg>
  );
}

function Nav({ user, currentPage, go, scrolled, onLogout }) {
  const ADMIN_EMAIL = "marcelo.santos304@gmail.com";
  const links = user
    ? [
        { id: "dashboard", label: "Início" },
        { id: "courses", label: "Cursos" },
        { id: "library", label: "Biblioteca" },
        ...(user.email === ADMIN_EMAIL ? [{ id: "admin", label: "Admin" }] : []),
      ]
    : [];

  return (
    <nav className={"nav " + (scrolled ? "scrolled" : "")}>
      <div className="brand" onClick={() => go(user ? "dashboard" : "landing")}>
        <div className="brand-mark" aria-label="Beit Net'zer" />
        <div className="brand-text">
          <span className="brand-name">Beit Net'zer</span>
          <span className="brand-sub">Beit Midrash Online</span>
        </div>
      </div>

      {user && (
        <div className="nav-links">
          {links.map((l) => (
            <button
              key={l.id}
              className={"nav-link " + (currentPage === l.id ? "active" : "")}
              onClick={() => go(l.id)}
            >
              {l.label}
            </button>
          ))}
        </div>
      )}

      <div className="nav-right">
        {user ? (
          <>
            <div className="nav-search">
              <span style={{ color: "var(--bone-mute)", fontSize: 13 }}>⌕</span>
              <input placeholder="Buscar shiur, parashá, mestre…" />
            </div>
            <button
              className="nav-avatar"
              title={`${user.name} — sair`}
              onClick={onLogout}
            >
              {user.name.split(" ").map((p) => p[0]).slice(0, 2).join("")}
            </button>
          </>
        ) : (
          <button
            className="btn-teacher-entry"
            onClick={() => go("professor-login")}
            title="Área de Professores"
          >
            <span className="heb">אֵזוֹר מוֹרִים</span>
          </button>
        )}
      </div>
    </nav>
  );
}

function Footer() {
  return (
    <footer className="foot">
      <div>© 2026 Beit Net'zer · Beit Midrash Online · Todos os direitos reservados</div>
      <div className="heb">בית נצר · אור התורה</div>
    </footer>
  );
}

// ============================================================================
// Card / Rail
// ============================================================================

function CourseCard({ course, onOpen }) {
  return (
    <article
      className="card"
      onClick={() => onOpen(course)}
      style={{ "--card-hue": course.hue }}
    >
      <div className="card-thumb" data-heb={course.hebrew}>
        <span className="card-thumb-badge">{course.level}</span>
        {course.isPdf ? (
          <span className="card-thumb-pdf">PDF</span>
        ) : (
          <span className="card-thumb-duration">{course.duration}</span>
        )}
      </div>
      <div className="card-body">
        <div className="card-cat">{course.category}</div>
        <h3 className="card-title">{course.title}</h3>
        <p className="card-desc">{course.description}</p>
        <div className="card-footer">
          <span>{course.teacher}</span>
          <div className="card-progress">
            <div
              className="card-progress-fill"
              style={{ width: ((course.id.charCodeAt(0) * 7) % 80) + 10 + "%" }}
            />
          </div>
        </div>
      </div>
    </article>
  );
}

function Rail({ title, hebrew, courses, onOpen }) {
  const trackRef = useRef(null);
  return (
    <section className="rail">
      <div className="rail-head">
        <h2 className="rail-title">{title}</h2>
        {hebrew && <span className="rail-title-heb">{hebrew}</span>}
        <span className="rail-link">Ver todos ›</span>
      </div>
      <div className="rail-track" ref={trackRef}>
        {courses.map((c) => (
          <CourseCard key={c.id} course={c} onOpen={onOpen} />
        ))}
      </div>
    </section>
  );
}

// ============================================================================
// Toast
// ============================================================================

function Toast({ msg, onDone }) {
  useEffect(() => {
    if (!msg) return;
    const t = setTimeout(onDone, 2600);
    return () => clearTimeout(t);
  }, [msg]);
  if (!msg) return null;
  return <div className="toast">{msg}</div>;
}

// Expose globally so other Babel scripts can use them
Object.assign(window, {
  Nav, Footer, CourseCard, Rail, Toast, StarOfDavid, GoogleIcon,
});
